Daha çox

PostGIS və ya GRASS-da yayılmış atributlardakı xətlər həll olunsun və ya bölünməsin?


Hər kəsişməsində yolları ayrılmış bir yol mərkəz xətt şəklim var. Bununla birlikdə, ümumi bir atribut dəsti olan LINESTRING'ları tək bir LINESTRING-a qoşmaq istərdim. Ad, sürət həddi və s. Dəyişmədikcə onları birləşdirmək istəyirəm. Bu OpenStreetMap ilə nəticədə qarışıqlıq üçündür.

Esri'nin Masaüstü üçün ArcGIS proqramı, Dissolve əmri və UNSPLIT_LINES seçimi ilə buna imkan verir.

QGIS-də bir Dissolve əmri də tapdım, ancaq deyəsən yalnız çoxbucaqlı və tək sahələrdə işləyir.

QGIS üçün heç bir şey olmadığını fərz etsək, PostGIS və ya GRASS-da bunu necə edəcəyini bilən varmı?


Maraqlı sual. Özümü bir PostGIS gurusu hesab etmirəm, ancaq probleminizlə maraqlandım və magistral yolu həll edən aşağıdakı sorğu ilə gəldim.LINESTRINGqeydlərMULTİLİNESTRINGbirdən çox sahələrdə ümumi dəyərlərə sahib olduqda qeydlər (verilənlər bazamda, ilə uyğunlaşdımaddövlətsahələr). OGR-dən PostGREsql-ə bir magistral yol şəklini düzəltmək üçün istifadə etdim (ushwys olaraq dəyişdirildi); buna görə həndəsə sahəm deyilirwkb_geometry. Məlumatlarınızı və sahə şərtlərinizi uyğunlaşdırmaq üçün bu sorğunu sındırmağa çalışın:

U.name, u.state, ST_AsText (ST_Multi (ST_Collect (u.wkb_geometry)))) kimi çox sətirdən SEÇİN: ushwys u GROUP BY u.name, u.state SİFARİŞ BY u.state LIMIT 100; - ########### Təcrübə etdiyiniz zaman məhdudiyyəti atın

Bu işləyirsə, bu sorğunu yerinə yetirmək və nəticələri ən çox istədiyiniz vektor formatı, məsələn shapefile, GML, CSV və ya başqa şəkildə ixrac etmək üçün ogr2ogr istifadə edə bilərsiniz. Ogr2ogr-dan SQL sorğularını axtarma haqqında məlumat üçün OGR SQL sənədlərinə baxın.

Referans olaraq PostGIS ST_Collect təlimatını və bir çox sahələrdə qruplaşdırma nümayiş etdirən bu saytı nəzərdən keçirdim.

Bu sorğunun redaksiyalarının sizin üçün işləməyəcəyini düşünürsünüzsə, xahiş edirəm mənə bildirin və cavabımı verəcəyəm ki, ətrafda qalmasın və insanları qarışdırmasın.


P.S. PostGIS-ə geodatanı basmaq üçün ogr2ogr istifadə etməklə tanış deyilsinizsə, məlumatların idxalını həyata keçirmək üçün aşağıdakı ogr2ogr skriptindən istifadə etdim (İnternetdən kopyalamaqdan və birbaşa ogr2ogr əmr pəncərənizə yapışdırmaqdan çəkinin, çünki səhifə formatlaşdırma sətir qırışları və ogr ssenarisini qıran cüt sitatlar üçün yazı / simvol əvəzetmələrini təqdim edir.):

ogr2ogr -f "PostGreSQL" PG: "host = 127.0.0.1 user = postgres dbname = gisdb password = my_password" "E:  GISData  UnitedStates  highways.shp" -nln ushwys -nlt geometry

[Yeniləmə]

Bu sorğunu işə saldıqdan sonra QGIS-də bunun necə "göründüyünü" görmək istədim, buna görə sorğunu tətbiq etmək üçün maddə verdimHaradabənd (mənə Missuri əyalətindəki ABŞ magistral yolu 65-in bütün variantlarını verir):

harada u.state = 'MO' və u.name '% US% 65%' LIKE

Sonra QGIS və QuickWKT plaginindən istifadə edərək nəticələnən magistral yolumun səkkiz (8) hissəsini əyani şəkildə göstərdimMULTİLİNESTRINGqeydlər. Ekran görüntüsündə gördüyünüz kimi, son nəticələr Hwy 65'i Missouriui'nin Iowa ilə şimal sərhədindən Arkanzas ilə cənub sərhədinə qədər aparır:

Mənim üçün bu görselleştirme, sorğumun xüsusiyyətlərin gözlənilməz bir təkrarlanması və ya ortadan qaldırılmasına səbəb olmadığını göstərdi. Beləliklə, sonrasında "Tamam, həll olunan səkkiz xüsusiyyət geri döndü, amma orijinal cədvəldəki neçə xüsusiyyət həqiqətən Missouri-dəki Hwy 65-i təmsil edir?" Növbəti sorğum bu suala cavab verdi. Göründüyü kimi orijinal verilənlər bazası Missouri-də Hwy 65-i təmsil etmək üçün otuz səkkiz (38) xüsusiyyətdən istifadə edir:

SEÇMƏK sayını (*) UŞWYSDƏN HARADA dövlət = 'MO' və '% US% 65%' kimi ad; - 38 döndü

Son təhlildə sorğu, ad və vəziyyət sahələrində dəyərləri paylaşan otuz səkkiz (38) xüsusiyyəti səkkiz (8) xüsusiyyətə endirdi. Bu nöqtədə, bu sorğunun, həll etmə tapşırığının bir çox sahəni nəzərə alması lazım olduqda tək hissəli geometrilərin çox hissəli həndəsələrə ayrılması üçün faydalı və uyğun olduğuna nisbətən əminəm.

Salam. :)


PostGIS-də xətlərin birləşməsi üçün xüsusi bir funksiya mövcuddur

ST_LineMerge - MULTILINESTRING-in bir araya gətirilməsindən əmələ gələn bir (çox) LineString (lər) i qaytarır.

http://www.postgis.org/docs/ST_LineMerge.html


GRASS GIS-də v.build.polylines-a nəzər yetirin

v.build.polylines qırılmış polylines yenidən qurmaq üçün istifadə edilə bilər