Daha çox

QGIS / GRASS ilə ən qısa yol matrisi


Almaniyanın yüksək gərginlikli elektrik şəbəkəsini təhlil edirəm. Verilənləri OSM-dən çıxartdım, QGIS-də idxal etdim və quruluşunu əllə sadələşdirdim, xüsusən də elektrik xətlərinin birləşdirildiyi tək düyünlər yaratdım, əksinə mürəkkəb həndəsələrlə bir çox yüksək gərginlikli yarımstansiyaya sahib oldum. Nəticədə, bu şəbəkəni ixrac etmək və üzərində bir optimallaşdırma modeli çalışdırmaq üçün GAMS-də istifadə etmək istəyirəm. Ancaq uzun hekayə qısadır. İki .shp sənədim var, standart WGS 84 CRS.

  1. şəbəkəni xətlər şəklində ehtiva edən bir sənəd (təxminən 250)
  2. şəbəkədəki (elektrik xətlərinin kəsişdiyi) bütün qovşaqları (təxminən 350) ehtiva edən bir sənəd

İndi 1 saylı faylı "yol" şəbəkəm kimi istifadə edərək, fayl 2-dəki bütün qovşaqlar arasındakı məsafələri ehtiva edən ən qısa məsafə matrisini çıxarmaq istəyirəm.

Python, GRASS və ya PostGIS-i proqroluğa təklif edən bir neçə cavabı oxudum, amma heç biri mənim üçün işləmirdi. Python, GRASS və PostGIS üçün yeniyəm, bu da həqiqətən kömək etmir.

(demək olar ki, unutmuşdum. Mac OS 10.7.5, GRASS 7.0, QGIS 2.8.1, PostgreSQL 9.0.13, PostGIS 2.1.7, pgruting 2.0.0)


Tamam, bir neçə saat çalışdıqdan sonra yeniləyin. Problemi az-çox təsadüfən həll etdiyimi düşünürəm.

Şəbəkə quruluşunu əlimlə rəqəmləşdirdiyim / sadələşdirdiyimə görə, problemlərdən biri, bir neçə xəttin başlanğıc və bitmə nöqtələri arasında kəsişmələr olmasıdır. QGIS-in bu məsələni həll etməsinə və Qenerasiya alətlər qutusundan 'Xətləri bölmək' istifadə etməsinə icazə vermək yaxşı bir fikir kimi görünür.

Bunu etdikdən sonra gridi və qovşaqları shp faylları olaraq GRASS-a idxal etdim. Düyünləri QGIS-in vektor təhlili vasitəsi 'Xətt kəsişmələri' vasitəsilə əldə etmək olduqca asandır. GRASS-da hər iki qatın idxal edildiyi üçün əməliyyat ilə v.net istifadə etdim: qovluq və qovşaq qatını xətt təbəqəsinə əlavə etmək üçün -c seçimi (qovşaqlar qat 2 kimi). Alternativ olaraq, əməliyyat: qovşaqlar demək olar ki, eynisini edir, çünki hesablanan qovşaqlar QGIS-dən shp faylına idxal etdiyimlə eynidir. Yalnız fərq: qovşaqlar fərqli identifikatorlar alır, buna görə QGIS-də müəyyən nöqtələri müəyyənləşdirmək üçün fərdi bir ID sxemini qoruya bilməzsiniz.
Buna baxmayaraq, şəbəkə artıq "hazırlandığı" üçün v.net.allpairs funksiyasından istifadə edilə bilər. Bütün xətlərim qat 1-də, bütün qovşaqlar qat 2-də. Bunları seçmək, geodezik hesablamanı aktivləşdirmək (SHP sənədlərim standart WGS 84 idi) və bir neçə dəqiqə gözləmək işi gördü. Heç bir xərc təyin etmədən, çıxış vektor qatının atributlar cədvəlindəki 'from_cat' sütunu və 'to_cat' sütunu indi köhnə QGIS identifikatorlarımdır və xərc sütunu km-dəki qovşaqlar arasındakı məsafəsidir.

Ümid edirəm bu təsvir mənim kimi, SQL / Python və s. İlə çox tanış olmayan və olduqca cəld bir həll yolu axtaranlara kömək edə bilər. GAMS modeli üçün ən qısa məsafə masasına ehtiyacım var və bunun bir parça tort olacağını düşündüm.


NetworkX (http://cheeseshop.python.org/pypi/networkx/) qrafika və şəbəkə analizi üçün bir çox funksiyası olan bir Python paketidir. Qurulmuş bu paketlə QGIS-də Python konsolundan istifadə edərək ən qısa məsafəli matrisin yaranması problemini həll edə bilərsiniz.

Sizə lazım olan yalnız etibarlı bir topologiyaya sahib bir şəbəkə təbəqəsidir (kənarları). Kənarlara ən azı 3 atribut lazımdır: hər kənarın başlanğıc və son qovşağının şəxsiyyətləri və hər kənarın uzunluğu. Aşağıdakı kodda bunları 1-dən 3-ə qədər olan sahələr kimi gözləyirəm. Müvafiq SQL sorğusundan və ya məkan birləşməsindən istifadə edərək bu məlumat şemasını, sonra da sətir uzunluğunun (sahə) hesablanmasını yarada bilərəm.

Şəbəkə qatını aktiv qat və sonra Python konsolunda edin:

nx aLayer = qgis.utils.iface.activeLayer () DM = nx.Graph () DM.add_weighted_edges_from ([(feat [1], feat [2], feat [3]) olaraq aLayer.getFeatures ( )]) nx.all_pairs_dijkstra_path_length (DM) çap et

Son sətirdə çap əmri nəticəni lüğətlərin bir lüğəti kimi çıxarır. Çıxışı konsola yazdırmaq əvəzinə bu quruluş daha da işlənmək üçün istifadə edilə bilər və ya sənədlərə yazılır.

Bu şəkildə NetworkX-dəki alqoritmlərin çoxu QGIS-də geo-prosessinq üçün istifadə edilə bilər.


Videoya baxın: QGIS-GRASS: Importing layers in GRASS (Oktyabr 2021).