Daha çox

Bəzi dözümlülükdən istifadə edərək iki çoxbucaqlı təbəqədən kəsişən bir linestring qatının yaradılması


İki postgis qatım var:

  • Birinci təbəqədə şəhərimin səkiləri var (mavi rəngli çoxbucaqlar).
  • İkincisi, şəhərimin səkilərini (yollarını) (qəhvəyi rəngli çoxbucaqlar) ehtiva edir.

Xəritə QGIS-də hər iki təbəqənin aktivləşdirilməsi ilə belə görünür:

Tamam, indi bu iki təbəqədən başlayaraq şəhərdəki bordürlər (xətlər) ilə bir qat əldə etməliyəm. Yeni qat layestrings-dən ibarət olmalıdır. Bu yeni qatdakı hər bir element, iki təbəqənin hər bir ölçüsünün kəsişdiyi bir linestring olmalıdır.

Aşağıdakı anlıq görüntüdə bu hissəcikli ərazidə yaradılmalı həndəsələri əl ilə rənglədim:

Pis nəbzim üçün üzr istəyirəm. Ümid edirəm məni daha yaxşı anlamağa kömək edir.

Tamam, məsələn QGIS-ə qatları əlavə edib bir təbəqəni digər qatla kəsişsəm, aşağıdakı təbəqəni alıram:

Yeni yaşıl təbəqə əldə olunmuş bordür qatdır. Bu təbəqə ilə iki çırpıntı var:

  • Çoxbucaqlılardan ibarətdir
  • Bütün əyrilər çəkilməyib.

Bu son dəlil ilə səkilərin və yolların qatlarının bir-birinin yanında dəqiq bir şəkildə ayrılmadığını kəşf edirəm, buna görə axtardığım təbəqəni əldə etmək üçün əməliyyatda bir növ tolerantlığa ehtiyacım var. Əvvəl dediyim kimi linestring qat olmalıdır.

Sorğunun birbaşa postgisdə və ya QGIS və ya digər proqram vasitələrindən istifadə edildiyini düşünmürəm, indi bunu necə həll edəcəyimi anlaya bilmirəm.


PostGIS-də çoxbucaqlı təbəqələrdən birinə bir az kənar əlavə etmək üçün ST_Buffer istifadə edə bilərsiniz, sonra bordürlər çoxbucağını almaq üçün ST_Intersection istifadə edin. İndi ST_StraightSkeleton sizə istədiklərinizi verə bilər (əslində yoxlanılmayıb, amma işləməlidir).

Aşağıda qeyd edildiyi kimi, skeletizasiya səhv nəticə verir. Daha yaxşı yolu etmək lazımdırST_DumpRingsyollarda çoxbucaqlı və almaqST_Qovşaqüzüklər və bordur çoxbucağı.


Videoya baxın: Çoxbucaqlılar. Dördbucaqlılar. Riyaziyyat test toplusu DİM 2019 1-ci hissə 14 (Oktyabr 2021).