3

ポイントレイヤーとラインレイヤーがあります。ポイントは、DGPS を使用して収集された道路の分岐点であり、ラインは追跡モードでハンドヘルド GPS を介して収集された接続道路です。その結果、線は実際には点に接続されません。

サンプル ネットワーク イメージ

今私はしたい:

  1. 各線ストリングからすべての中間ノードを削除して、直線にします。

  2. 線の始点と終点を最も近い点にスナップします。

私は PostGIS 2.0 を使用しています。

UPDATE line
SET geom = ST_Simplify(geom, 1000);

Q. それを達成するための他の良い方法はありますか? (私はばかげた許容範囲を使用しているため)

UPDATE line
SET geom = ST_AddPoint(
(SELECT geom FROM line WHERE id = 1),
(SELECT p.geom FROM point AS p, line AS l
    ORDER BY ST_Distance(p.geom,(SELECT ST_StartPoint(l.geom) FROM lt WHERE l.id=1)) LIMIT 1),
0)
WHERE id=1;

これにより、ライン(id = 1)が最も近いポイント(ラインの先頭に追加されたポイント)まで延長されます。

Q. 上記は少し複雑に見えますが、他に効率的な方法/機能はありますか?

4

1 に答える 1

4

同じクエリで両方の操作を行うのが合理的と思われます (テストされていません)。

UPDATE line l
SET geom = ST_MakeLine(
    (SELECT geom FROM point p ORDER BY ST_Distance(p.geom, ST_StartPoint(l.geom)) LIMIT 1),
    (SELECT geom FROM point p ORDER BY ST_Distance(p.geom, ST_EndPoint(l.geom)) LIMIT 1)
);

データ セットが小さく、クエリを 1 回だけ実行する場合、パフォーマンスは問題になりませんが、速度を上げるために bbox 比較を追加できます。

SELECT geom FROM point p WHERE p.geom && ST_Expand(ST_StartPoint(l.geom), 100) ORDER BY ST_Distance(p.geom, ST_StartPoint(l.geom)) LIMIT 1
于 2013-01-04T13:54:36.240 に答える