ラインストリングをポイントでカットする最良の方法をチェックしていました。
シナリオは次のとおりです。たくさんの道路があり、交差点でカットされたセグメントが必要です。
わかった
線ストリング(ポイントでカットされていない完全な)テーブル
st_intersectionポイントテーブル
交差点テーブルでカットされた独立したラインストリングセグメントを取得する必要があります。
私はPostGIS関数を使用していて、いくつかのアプローチを見つけましたが、それらのすべてが何らかの問題を引き起こしています。
これは私がすでにテストしたものです:
1
ラインテーブル:1行、1200行のst_memunionポイントテーブル:1700行(ポイント)
悪い点:本当に多くの時間とメモリのフラッシュが必要です。同時に複数のテーブルを作成できないため、メモリはそれを処理できません。そしてその結果は汚くて厄介です。私に正しい行番号を与える代わりに、後でそれをクリーンアップする必要があります(ここで説明されている交差点でのラインの分割)
CREATE TABLE lines_with_messy_result AS (
SELECT
((ST_DUMP(ST_SPLIT(a.geom,b.ix))).geom) as geom
FROM st_union_lines a
INNER JOIN lots_of_points b
ON ST_INTERSECTS(a.geom, b.ix)
);
--then need to clean this up
create table lines_segments_cleaned as (
SELECT DISTINCT ON (ST_AsBinary(geom))
geom
FROM
lines_with_messy_result
);
この方法のソース/アプローチ:https : //stackoverflow.com/questions/25753348/how-do-i-divide-city-streets-by-intersection-using-postgis
2
同じ線/点テーブル。まだ厄介な結果であり、これをクリーンアップする必要があります。クエリを完了するにはまだ時間がかかります。
--messy table
Create table messy_lines_segments as
Select
row_number() over() as id,
(st_dump(st_split(input.geom, blade.ix))).geom as geom
from st_union_lines input
inner join lots_of_points blade on st_intersects(input.geom, blade.ix);
--then cleaning the messy table
delete from messy_lines_segments a
where exists
(
select 1 from messy_lines_segments b where a.id != b.id and st_coveredby(b.geom,a.geom)
);
この方法のソース/アプローチ:交点でラインを分割
3
私はこの関数も見つけました:https : //github.com/Remi-C/PPPP_utilities/blob/master/postgis/rc_Split_Line_By_Points.sql
これはmessy_resultを残さないので、クリーンアップする必要があります。ただし、両側からst_memunionが必要です(linesテーブルとpointsテーブル)。
それは一種です:
create table osm.calles_cortadas_03segmentos_sanluis as (
SELECT result.geom
FROM
osm.calles_cortadas_01uniones_sanluis AS line,
osm.calles_cortadas_00intersecciones_sanluis AS point,
rc_split_line_by_points(
input_line:=line.geom
,input_points:=point.ix
,tolerance:=4
) AS result
);
しかし、結果を得るための時間も非常に長いです。また、長いテーブル(1万行、1万4,000ポイント)を試しましたが、メモリ不足の問題が発生しました。
EsriのArcGISも試しましたが、結果も悪いです...
それで、これをPostGIS geom関数で行う最良の方法は何ですか?
つまり、トポロジーに踏み込むことなく。
それともあなたの一番のおすすめは何ですか?