编辑公共设施网络

字数统计: 1.2k
阅读时长: 约 3 分钟
当前版本: 4.29

编辑要素

编辑要素很简单,可以通过 FeatureService.applyEdits() 完成。编辑公共设施网络要素将生成脏区。通过 FeatureService.applyEdits() 了解编辑要素的更多信息。通过要素服务指南文档,以了解有关编辑要素的更多信息。

关联简介

编辑关联是通过要素服务类上的 applyEdits() 方法执行的。自 4.29 起,随着在 UtilityNetwork 类中引入 generateAddAssociationgenerateDeleteAssociations,已对编辑关联进行了简化。

如何编辑关联

以下示例演示了如何编辑关联

js
    // Instantiating a UtilityNetwork instance using layerUrl
    const utilityNetwork = new UtilityNetwork({
        layerUrl: "https://hostName.com/server/rest/services/Test/FeatureServer/17";
    });
    await utilityNetwork.load();

    const association = new Association({
        globalId: "{88355CB3-B011-4715-BB90-047B8C7ABF48}",
        fromNetworkElement: new NetworkElement({
            globalId: "{09B7A0F9-811D-4CCF-95A9-D1995D44C631}",
            networkSourceId: 8,
            terminalId: 1,
            assetGroupCode: 1,
            assetTypeCode: 1,
        }),
        toNetworkElement: new NetworkElement({
            globalId: "{86DD4700-4D1B-4872-93CD-68783F7996B6}",
            networkSourceId: 10,
            terminalId: 1,
            assetGroupCode: 2,
            assetTypeCode: 2,
        }),
        associationType: "attachment",
    });

    const canAdd = await utilityNetwork.canAddAssociation(association); // Will check rules table to verify if given associations are valid
    const generatedAddAssociation = await utilityNetwork.generateAddAssociations([association]);
    const generatedDeleteAssociation = await utilityNetwork.generateDeleteAssociations([association]);

    if(association)
    //Adding new Association
        await featureService.applyEdits(
            [generatedAddAssociation],
            {
                gdbVersion: "name.demo",
                globalIdUsed: false,
                honorSequenceOfEdits: false,
                usePreviousEditMoment: false,
                returnServiceEditsInSourceSR: false
            }
        );
    await featureService.applyEdits(
        [generatedDeleteAssociation],
        {
            gdbVersion: "name.demo",
            globalIdUsed: true, // Must be true when deleting Associations via generateDeleteAssociations
            honorSequenceOfEdits: false,
            usePreviousEditMoment: false,
            returnServiceEditsInSourceSR: false
        }
    );

在调用 generateAddAssociations 之前,canAddAssociation 可以验证给定的关联是否有效。

验证网络拓扑

验证公共设施网络的网络拓扑可保持要素编辑空间和网络拓扑空间之间的一致性。验证网络拓扑可以包括网络中存在的全部或部分脏区。支持网络拓扑的同步和异步验证。验证应在进行编辑后和网络追踪之前完成。在公共设施网络的编辑工作流中,网络拓扑的验证也将被视为编辑操作。随着网络的某些部分被编辑或修改,它们在网络拓扑中变得过时,并被标记为脏区。脏区是一个指示器,用于指示在地图上看到的内容与网络拓扑中存储的内容不匹配。为分析事件而保持网络拓扑更新非常重要;这可通过验证网络拓扑来完成。

何时验证?

应定期验证网络拓扑,以确保您的网络正常运行。每当对公共设施网络进行编辑时,都会形成脏区。应在编辑之后和网络追踪之前进行验证,以确保网络的一致性。脏区表示网络中已修改或更新但尚未与网络其余部分同步的部分。验证网络拓扑将移除脏区并更新网络拓扑,使其与要素中的值相匹配。要使脏区可见,必须将脏区图层添加到地图中。此图层的 URL 可从 UtilityNetwork.networkSystemLayers.dirtyAreasTableUrl 获取。

使用 Utility Network 类验证网络拓扑

使用 Utility Network 类验证拓扑可以同步或异步完成。同步速度更快,但如果对大量要素执行此操作,也会出现超时。异步选项较慢,但不会超时。因此,在验证大量要素时,建议使用异步。例如,同步验证网络拓扑:

js
 // Instantiating a UtilityNetwork instance using layerUrl
 const utilityNetwork = new UtilityNetwork({
    layerUrl: "https://hostName.com/server/rest/services/Test/FeatureServer/17";
 });
 await utilityNetwork.load();

 const extent = new Extent({
    xmin: 470789.0888,
    ymin: 3597733.2051,
    xmax: 531454.2759999996,
    ymax: 3639864.802100001,
    spatialReference: { wkid: 26911, latestWkid: 26911 }
 });

 await utilityNetwork.validateTopology({ validateArea: extent });

以下为异步验证网络拓扑验证。

js
    // Instantiating a UtilityNetwork instance using layerUrl
    const utilityNetwork = new UtilityNetwork({
        layerUrl: "https://hostName.com/server/rest/services/Test/FeatureServer/17";
    });
    await utilityNetwork.load();

    const extent = new Extent({
        xmin: 470789.0888,
        ymin: 3597733.2051,
        xmax: 531454.2759999996,
        ymax: 3639864.802100001,
        spatialReference: { wkid: 26911, latestWkid: 26911 }
    });

    await utilityNetwork.submitTopologyJob({ validateArea: extent });

使用微件验证网络拓扑

如果希望 web 应用程序包含用于验证网络拓扑的用户界面,JavaScript API 提供了一个微件,可以轻松将其添加到应用程序中。只需对微件进行配置,即可使用。示例:

js
    // How to use the UtilityNetworkValidateTopology widget
    view.when(async () => {
        // load all the layers in the map
        await view.map.loadAll();

        // if the map does not contain a utility network layer return
        if(!(view.map.utilityNetworks.items.length > 0)) {
            return;
        }

        utilityNetwork = view.map.utilityNetworks.getItemAt(0);
        await utilityNetwork.load();

        // function to add the dirty areas layer to the map
        addDirtyAreasLayer();

        // initialize the UtilityNetworkValidateTopology widget
        const unValidateTopology = new UtilityNetworkValidateTopology({
            view,
            utilityNetwork: utilityNetwork
        });

        view.ui.add(unValidateTopology, "top-left");
    });