Daha çox

PostGIS istifadə edərək linestring öz-özünə kəsişmələrini hesablayırsınız?


Bir linestringdə öz-özünə kəsişmə sayını tapmaq üçün PostgreSQL + PostGIS-dən istifadə etməyin bir yolu varmı?

Məndə ancaq dairələrdə irəliləyən bir linestring var və özünün keçdiyi sayını tapmalıyam.


Dəqiq bilmirəm, amma bunun kimi bir şeyin probleminizi həll edə biləcəyini düşünürəm (bu çoxsaylı sistemlərdə işləməyəcək, ancaq onları dayandırmaq və ya onları sıxmaq olar):

SELECT ID, COUNT (*) AS THE geunt FROM (SELECT id, ST_Intersection (A.geom, B.geom) AS geom FROM (SELECT xx.id, xx.id2, st_makeline (xx.l_start, xx.l_end) AS geom FROM (SEÇİN x.id, generate_series (1, st_npoints (x.geom) - 1) AS id2, st_pointn (x.geom, generate_series (1, st_npoints (x.geom) - 1)) AS l_start, st_pointn (x.geom) , generate_series (2, st_npoints (x.geom))) AS l_end FROM (SELECT DATA_TABLE.id, DATA_TABLE.geom FROM DATA_TABLE) AS X) AS XX) IN INN JOIN (SEÇİN xx.id, xx.id2, st_makeline ( xx.l_start, xx.l_end) AS geom FROM (SEÇİN x.id, generate_series (1, st_npoints (x.geom) - 1) AS id2, st_pointn (x.geom, generate_series (1, st_npoints (x.geom) -) 1)) AS l_start, st_pointn (x.geom, generate_series (2, st_npoints (x.geom)))) AS l_end FROM (SELECT DATA_TABLE.id, DATA_TABLE.geom FROM DATA_TABLE) AS X) AS XX) AS ON ON. ID = b.ID AND A.id2 <> B.id2 AND A.id2 <> B.id2-1 AND A.id2 

Bu necədir (fərz edintestlinestring masanızdır):

Əvvəlcə linestring simvollaşdırın, məsələn. orijinal zirvələri nəzakətdə saxlayaraq hər kəsişmədə təpələr yaradın.

CƏDVƏL düyününü SEÇİN id, ST_Node (wkb_geometry) kimi wkb_geometry FROM testi olaraq yaradın;

Yeni linestrings bütün fərqli nöqtələri saymaq. İlkin zirvələrin sayını işarələnmiş saydan xülasə etmək, kəsişmələrin sayını verməlidir.

SEÇİN id, COUNT (id) FROM (SEÇİN DISTINCT (ST_DumpPoints (wkb_geometry)). Geom, id FROM node) tmp group by id;