Daha çox

PostGIS -də xətlərdən çoxbucaq yaradın

PostGIS -də xətlərdən çoxbucaq yaradın


Bir çoxbucağı kiçik bir çoxbucaqlı bir xətdən ayırmağa çalışıram, amma st_split funksiyasından istifadə edə bilməyəcəyimi düşünürəm. Mənə lazım olan şey, böyük bir xəttin içərisində kiçik bir çoxbucaqlar yaratmaqdır.

Bəzi yolları sınadım, amma nəticə əldə edə bilmirəm. Nə sınadım:

St_split () istifadə edərək LineString -dən bir çoxbucaqlı bölün

Sərhəd poliqonundan.

Və Linestring masası:

Aşağıdakı çoxbucaqlılara ehtiyacım var:

Problem: Bir çoxbucağı bir neçə sətirdən ayıra bilmirəm, nə də çoxbucaqlı bir çoxbucaqlı.

Çalışdığım digər üsul budur xətlərdən çoxbucaqlılar yaradın st_polygonize () ilə çalışdığım SQL:

Gid olaraq g.path [1] seçin, g.geom :: geometriya (poliqon, 22033) geom FROM olaraq (SELECT (ST_Dump (ST_Polygonize (geom))).* FROM linestable) g olaraq;

PostgreSQL və PostGIS istifadə edərək xətt seqmentlərindən çoxbucaqların yaradılmasından alınmışdır

Problem: Mən yalnız bir çoxbucaqlı əldə edə bilərəm (sərhəd).

Kimsə mənə deyə bilərmi ki, çoxbucaqlıları linestringdən almağın ən yaxşı yolu olar, yoxsa bir şey əldən verirəm?

Qeyd: Cədvəllər eyni SRID -dədir və həndəsələr bir ızgaraya yapışdırılır. QGIS -də çoxbucaqlılaşdırma prosesini xətlərdən çoxbucağa mükəmməl şəkildə idarə edə bilərəm.

John'un tələbi olaraq, burada ən uzun xətt masası. https://drive.google.com/file/d/0B603y_m735jfS014S0EyVnpMUEU/view?usp=sharing


Bu işi əvvəlcə ST_Node istifadə edərək, ST_Collect ilə birlikdə xətləri bir noded linestrings dəstinə çevirmək üçün əldə etdim. MultiLinestring.

Üçün sənədlərdə deyildiyi kimi ST_Düyün:

Daxil olanların hamısını qoruyarkən mümkün olan ən az sayda qovşaqdan istifadə edərək bir sıra xətti keçidləri tam olaraq düyünləndirin.

Bunun mənası budur ki, bütün çoxlu xətlərin xarici halqasına ekvivalent təşkil etmək üçün bütün mümkün birləşmələrdə birləşdirilmişdir. Halbuki, cəhd etsəniz ST_Polygonize edin LineStrings dəsti, heç biri özündə çoxbucaqlı təsvir etmir, sadəcə LineStrings -i geri alırsınız. Beləliklə, bu işləyir:

İLƏ multi (geom) AS (SELECT ST_Node (ST_Collect (geom)) FROM leyenda_digitalizar00) ST_AsText SELECT ((ST_Dump (ST_Polygonize (geom))). Geom) FROM multi;

Bunun ilk hissəsini, yəni CTE multi -nu işə salırsınızsa, çıxış belə görünür:

ÇOX GÜNLÜK ((204.5 69.9000000000004,204.5 69.9000000000004), (204.5 68.9,205.4 68.9), (204.5 68.9.204.5 69.204.5 69.1,204.5 69.2,204.5 69.3,204.5 69.4,204.5 69.5,204.5 69.54.520.5.6 204.5 69.9000000000004), (209.5 68.9.209.5 68.8.209.5 68.7.209.5 68.6.209.5 68.5.209.5 68.4.209.5 68.3.209.5 68.2.209.5 68.1.209.5 68.209.5 67.9.209.5 67.8.209.5 67.7.209.5 67.620.9.5 67.6 , 209.5…

İndi, bu MultiLinestring -i ST_Polygonize ilə qidalandırdığınızda, gözlənildiyi kimi işləyir, məsələn,

POLYGON ((205.4 68.9,204.5 68.9,204.5 69,204.5 69.1,204.5 69.2.204.5 69.3,204.5 69.4,204.5 69.5,204.5 69.6,204.5 69.7,204.5 69.8,204.5 69.9,204.5 69.900000000000.44.49.95)

POLYGON ((204.5 69.9000000000004,204.5 70.204.5 70.1.204.5 70.2.204.5 70.3.204.5 70.4.206.8 70.4.209.5 70.4.209.5 70.3.209.5 70.2.209.5 70.1.209.5 70.209.5 69.9.205.4 69.900400)

POLYGON ((206.8 70.4.204.5 70.4.204.5 70.5.204.5 70.6.204.5 70.7.204.5 70.8.204.5 70.9.204.5 71.204.5 71.1.204.5 71.2.204.5 71.3.204.5 71.4.206.8 71.4.206.8 70.4))

Aydındır ki, ST_AsText yalnız illüstrasiya üçündür və yolun kimliyini də istəyirsinizsə, çimdikləməli olacaqsınız.

Əsas götürmə budur ST_Polygonize, artıq çoxbucağın konturunu təsvir edən linestrings gözləyir, ST_Node (ST_Collect (...) yuxarıda etdiyi şeydir.