作者:ドレミ
現在、パイプラインシステム管理のほとんどは 3D クライアントを使用して実現されており、パイプバースト解析も 3D クライアント上で表示されます。しかし最近、お客様からパイプラインの一部の解析機能を二次元マップ上に実装したいという問い合わせが多くなりました。そこで本記事では、2次元マップ上でスキブ解析を実現するための考え方と実装プロセスを紹介します。
#### 1. データ準備
3D データ
パイプバースト解析を 2D マップ上で実現するとはいえ、やはり 3D ネットワーク解析モジュールを呼び出すため、3D データの準備が必要です。
iServerに付属している3次元ネットワーク解析のサンプルデータ(3次元点データ、3次元線データ、3次元ネットワークデータ)を使用します。
3D ネットワーク データの属性テーブル:
2D データ
3D データのクエリには幾何情報が含まれていないため、フロント エンドで描画できません。そのため、クエリと描画を完了するには 2D データが必要です。SuperMap iDesktop ソフトウェアに付属のタイプ変換ツールを使用して、3D データを 2D データに変換できます。2次元の点線に変換されたデータセットはマップとして保存されます。
####2. サービス公開 作成
したワークスペースをマップサービスおよび 3D ネットワーク解析サービスとして公開します。
####3. このコードは、
ベース マップとして 2 次元マップをロードすることを実現します。
Layer = new SuperMap.Layer.TiledDynamicRESTLayer("底图", url, {transparent: true, cacheEnabled: true},{maxResolution:"auto"});
発破解析では、まず発破管を選択する必要がありますが、マウスで線を選択するのはあまり便利ではないことを考慮して、距離クエリを使用して発破点を選択することをお勧めします
//查询二维地图的数据,保存查询到的爆管ID
queryParam = new SuperMap.REST.FilterParameter({name: "PipeLine2D@Pipe3D"});
queryByGeometryParameters = new SuperMap.REST.QueryByDistanceParameters({
queryParams: [queryParam],
isNearest:true, //选择最近查询,并且只返回一个
expectCount:1,
geometry: drawGeometryArgs.feature.geometry,
distance:0.0001 //设置距离范围,超过此范围就不返回结果
});
また、3D 設備ネットワーク解析で指定した設備ノード ID の配列をリストする必要があります。一般的に言えば、それはバルブです。
Var sourceNodeIDs='[24,25,34,37,53,61,64,67,73,78,125,127,132,152,161,196,209,212,221,269,276,283,294,299,315,332,349,367,383,423,435,438,444,473,488]';
爆発パイプの上流に最も近いバルブとバルブの下流施設をクエリします。
SuperMap.REST.FacilityAnalystUpstream3DService 上流の主要施設を呼び出して、リソース サービス クラスを見つけます。
var parameter = new SuperMap.REST.FacilityAnalystUpstream3DParameters({
sourceNodeIDs: sourceNodeIDs, //三维设施网络分析中指定的设施结点ID数组,也就是阀门,上面定义了一部分节点,不能为空,如 [84,85]
edgeID: BP, //上一步保存的爆管ID
nodeID: null,
isUncertainDirectionValid: true //三维设施网络分析中指定不确定流向是否有效
});
結果処理。返される結果は、スクイブ位置の上流にある最も近いバルブとバルブの下流のパイプ セグメントの ID 配列です。
function facilityAnalystUpstream_processCompleted(facilityAnalystUpstream3DEventArgs) {
var result = facilityAnalystUpstream3DEventArgs.result;
var edgeID = result.edges;
var nodeID = result.nodes[0]; //只返回了ID,所以还得查询二维数据
queryBySQL(nodeID,edgeID);
//alert("需要关闭的最近阀门是:"+nodeID+","+"\n"+"该阀门下游管段:"+edgeID);
3 次元データ クエリは幾何学オブジェクトを返さないため、edgeID と nodeID を保存し、2 次元データに対して別のクエリを実行する必要があります。3D 解析によって返される結果は文字列であるため、処理する必要があることに注意してください。
//查询节点
queryParam1 = new SuperMap.REST.FilterParameter({
name: "PipePoint2D@Pipe3D",
attributeFilter: "SMID="+nodeID
});
//查询弧段
queryParam2=new SuperMap.REST.FilterParameter({
name: "PipeLine2D@Pipe3D",
attributeFilter: "SMID in "+str //str为处理好的edgeID
});
//多条件同时查询
queryBySQLParams = new SuperMap.REST.QueryBySQLParameters({
queryParams: [queryParam,queryParam2],
});
最後に、表示のためにクエリ結果を VectorLayer に追加します。
パイプ バースト ダウンストリーム ファシリティの追跡
SuperMap.REST.FacilityAnalystTracedown3DService ダウンストリーム トラッキング リソース サービス クラスの呼び出し
パラメーター:
var parameter = new SuperMap.REST.FacilityAnalystTracedown3DParameters({
edgeID: BP, //爆管ID
nodeID: null,
weightName: 'SMLENGTH', //三维设施网络分析中指定的权值字段名称
isUncertainDirectionValid: true
});
結果の処理は最近のバルブ解析と同じで、解析によって返された結果アーク ID を保存し、2 次元データをクエリして VectorLayer に表示します。
上記はバーストパイプ解析における最も一般的な解析手法の2次元マップでの表示と実装プロセスです、その他のシンクサーチやソースサーチなどはAPIドキュメントを参照してください、実装の考え方は同じです。
デモ プログラムのリンクは http://support.supermap.com.cn/product/CodeLibrary.aspx?id=531 に添付されています。