Daha çox

PyQGIS-də qat dərəcəsinə qədər böyütmək?

PyQGIS-də qat dərəcəsinə qədər böyütmək?


Eklentim pyqgis 2.2 ilə əlaqədar olaraq, bir vektor qatını uğurla yükləyə bilərəm. Ancaq təbəqə miqyasına yaxınlaşdırmağa çalışsam işə yaramır.

Qatı dərəcədə böyütmək üçün necə etmək lazımdır?


Təkcə təklifinizi sınadım, kodunuzu plaginimə yapışdırdım. Ancaq təəssüf ki, bir vektor qatını yüklədiyim zaman. Qat dərəcəsinə yaxınlaşdırmağa çalışıram (sağ klik sayəsində -> qat dərəcəsinə yaxınlaşdırın). Heç bir səhv mesajım yoxdur, amma vektor təbəqəsi miqyasında dəyişiklik zoomu yoxdur.

Python.py (github plugin linki) ni burada oxuya bilərsiniz:

https://github.com/picardie-nature/clicnat-qgis/blob/master/plugin.py

Fikirləriniz varmı?


Aşağıdakı kimi bir şey işləməlidir.

vLayer = iface.activeLayer () kətan = iface.mapCanvas () ölçü = vLayer.extent () canvas.setExtent (ölçü)

Bunu etmək üçün bir yol, təbəqədəki bütün xüsusiyyətləri seçmək, seçilənə yaxınlaşdırmaq və sonra hər şeyin seçimini etməkdir:

bu kodu istifadə edin:

vlayer.selectAll () mCanvas = iface.mapCanvas () mCanvas.zoomToSelected () vlayer.removeSelection ()

Hazırda bütün məlumatların və xəritənin özünün daxil olduğu CRS-ə WGS84 deyilir. Bu, məlumatları təmsil etmək üçün çox yayılmış bir Coğrafi Koordinat Sistemidir (GCS). Ancaq görəcəyimiz kimi bir problem var.

  • Cari xəritənizi qeyd edin.
  • Sonra altında tapdığınız dünya xəritəsini açın exercise_data / world / world.qgs .
  • İstifadə edərək Cənubi Afrikaya yaxınlaşdırın Yaxınlaşdırmaq alət.
  • İçərisində bir tərəzi təyin etməyə çalışın Miqyas olan sahə Status çubuğu ekranın altındakı. Cənubi Afrika üzərində olarkən bu dəyəri qoyun 1:5000000 (bir-beş milyon).
  • Xəritənin ətrafına nəzər yetirin Miqyas sahə.

Miqyasın dəyişdiyinə diqqət yetirirsiniz? Bu, yaxınlaşdığınız bir nöqtədən uzaqlaşdığınız üçün 1:5000000 , ekranınızın mərkəzində idi. Bu nöqtənin ətrafında miqyas fərqlidir.

Bunun səbəbini anlamaq üçün dünyanın bir kürəsi haqqında düşünün. Şimaldan cənuba uzanan xətləri var. Bu uzunluq xətləri ekvatorda bir-birindən çox uzaqdır, lakin qütblərdə görüşür.

Bir GCS-də bu sferada işləyirsiniz, ancaq ekranınız düzdür. Kürəni düz bir səthdə təmsil etməyə çalışdığınız zaman, bir tennis topunu kəsib düzləşdirməyə çalışdığınız zaman baş verəcək hadisəyə bənzər bir təhrif meydana gəlir. Bunun bir xəritədə mənası budur ki, uzunluq xətləri qütblərdə belə (görüşməli olduqları yerdə) bir-birlərindən bərabər şəkildə uzaqlaşırlar. Bu o deməkdir ki, xəritənizdəki ekvatordan uzaqlaşdıqda gördüyünüz cisimlərin miqyası getdikcə böyüyür. Bunun praktik olaraq bizim üçün mənası budur ki, xəritəmizdə sabit bir miqyas yoxdur!

Bunu həll etmək üçün əvəzinə Proqnozlaşdırılan Koordinat Sistemi (PCS) istifadə edək. Bir PCS & # 8220projects & # 8221 və ya məlumatları miqyas dəyişikliyinə imkan verən və düzəldən bir şəkildə çevirir. Buna görə tərəzi sabit tutmaq üçün bir PCS istifadə etmək üçün məlumatlarımızı təkzib etməliyik.


Təklif olunan həll

Mesh təbəqəsi (QgsMeshLayer) aşağıdakı əsas komponentlərdən ibarətdir:

məlumat təminatçısı - provayderlərin vektor və raster təbəqələri üçün necə istifadə edildiyi kimi, bu da mesh quruluşuna və meshun üstündəki məlumatlara giriş üçün mücərrəddir.

renderer - istifadəçinin təyin etdiyi konfiqurasiyaya uyğun şəkilləri xəritələşdirmək üçün mesh qatının göstərilməsinə diqqət yetirir

önbellek - məlumat təminatçısından məlumat almaq yavaş ola bildiyindən, sürətli giriş üçün bəzi məlumatları yaddaşda saxlamaq üçün bir önbellek istifadə olunur

Məlumat təminatçısı

Fərqli fayl formatları üçün çoxsaylı məlumat təminatçıları ola bilər, lakin bir qat həmişə tək bir məlumat təminatçını göstərəcəkdir (QgsMeshDataProvider)

Məlumat provayderinin əsas vəzifələri:

  • mesh quruluşu (qovşaqların, kənarların və üzlərin siyahısı)
  • məlumat dəstləri haqqında metadataları qaytarın (raster lentlərinin və onların metadatalarının siyahısını almaq kimi)
  • bir verilənlər bazasından bir məlumat pəncərəsini qaytarın

İlkin tətbiqetmədə məlumat təmin edənlərin yalnız oxunaqlı olacağını düşünürük. Gələcəkdə bu dəyişə bilər və mesh quruluşunu dəyişdirmək və ya məlumat dəstlərini əlavə etmək / çıxarmaq / dəyişdirmək üçün çağırışlar ola bilər.

Renderer

Mesh qat göstəricisi (QgsMeshLayerRenderer) verilmiş xəritə ölçüsündə xəritənin çəkilməsindən məsuldur.
QgsMapLayerRenderer-dən əldə edilir və QGIS xəritə göstərmə mühərrikindən çağırılır.

Renderer aktiv məlumat dəstindən məlumat verir - istifadəçilər hansının aktiv olduğunu seçə biləcəklər.

Göstərmə üç mərhələdən ibarətdir və istifadəçi hansı addımların istifadə ediləcəyini konfiqurasiya etməlidir:

konturların göstərilməsi. Bu, aktiv məlumat dəstindəki dəyərləri interpolasiya edir və mesh ilə örtülmüş hər pikselə bir rəng təyin edir. Vektor məlumat dəstləri üçün vektorların böyüklükləri dəyər kimi istifadə olunur.

vektorların göstərilməsi. Bu, aktiv verilənlər bazasının məlumatları üçün müvafiq miqyaslı ox işarələrini çəkir. Aydındır ki, bu yalnız vektor məlumat dəstləri üçün mümkündür.

mesh göstərilməsi. Aktiv verilənlər bazası burada istifadə edilmir - yalnız mesh quruluşu, istəyə görə etiketlərlə göstəriləcək.

Göstərmə alqoritmi aşağıdakı addımlardan ibarətdir:

  1. Xəritənin həcmini nəzərə alaraq, mesh elementlərinin göstərilməsi üçün lazım olduğunu anlamaq üçün məkan indeksindən istifadə edin
  2. Elementlərin siyahısını istifadə edərək, aktiv məlumat dəstindən hansı məlumat bloklarına ehtiyac olacağını müəyyənləşdirin.
  3. Lazımi məlumat bloklarını önbellekdən götürməyə çalışın. Bloklar önbellekdə yoxdursa, onları məlumat təminatçınızdan alın və müvəqqəti olaraq yaddaşda saxlayın.
  4. Mesh elementlərini xəritə ölçüsündə gəzin və bir-bir göstərin (əvvəl konturlar, sonra vektorlar, sonra mesh).

Gizli yer

Veri girişinin kifayət qədər sürətli olduğundan əmin olmaq üçün bir önbellek saxlamalıyıq. Bu aşağıdakı hissələrdən ibarət olacaq:

Mesh quruluşu. Bu məlumat quruluşuna çox tez-tez müraciət ediləcək və nisbətən kiçik olduğundan bütövlükdə önbelleğe alına bilər.

Məlumat blokları. Məlumat provayderlərindən verilənlərə giriş nisbətən yavaş ola bilər və çox vaxt xəritə təqdim edən şəxsin zamanla eyni və ya oxşar məlumat dəstinə daxil olması lazımdır. Eyni zamanda, məlumat bloklarında saxlanılan məlumatların ümumi miqdarı böyük ola bilər (gigabayt sırası ilə), buna görə də önbelleğin bu hissəsi maksimum önbellek ölçüsü ilə məhdudlaşdırılmalı və məlumat blokları ən yaxın zamanda dəyişdirilməlidir. istifadə (LRU) strategiyası.

"Alınan" üçbucaqlı mesh. Göstərməni sürətləndirmək və sadələşdirmək, həmçinin 3D xəritə görünüşündə göstərmə üçün şəbəkə təmin etmək üçün istifadə olunur. Daha ətraflı məlumat aşağıda.

Məkan indeksi. Xəritə göstərmə və təbəqə identifikasiyası üçün sürətli məkan sorğularına ehtiyacımız var ("hörgü elementləri bu düzbucaqlıda").

Mesh törəməsi

Alınan üçbucaqlı mesha ehtiyacımızın səbəbləri:

  • mesh quruluşu ümumiyyətlə üçbucaq, dördbucaqlı və ya hətta daha çox zirvəsi olan çoxbucaqlı ola bilər. Üçbucaqlardan başqa formalarda interpolasiya daha bahalı / çətindir və 3D şəklində göstərmək üçün hər halda üçbucaqlı bir mesha sahib olmalıyıq.
  • 1D elementləri (kənarları) göstərərkən onları qalınlıqlarına görə dördlüyə çevirməliyik (və dördlər bir cüt üçbucağa çevrilir).
  • xəritə CRS mesh qatı CRS-dən fərqli olduqda, uçuşda təkrar reytinq etməliyik. Xəritədə CRS-də əldə edilmiş mesh saxlamaq bizi hər göstəriləndə yenidən qiymətləndirməkdən xilas edir.
  • təfərrüat səviyyəsi - geniş bir sahə göstərərkən sadələşdirmə edə və göstərmə üçün daha az üçbucaqdan istifadə edə bilərik, daha kiçik sahə üçün daha yaxşı göstərmə keyfiyyəti üçün dördlər kimi elementləri ikidən çox üçbucaqlara bölmək istəyə bilərik.

Törədilmiş mesh müəyyən xəritə parametrləri (xüsusilə miqyas və CRS) üçün saxlanılır. Xəritə parametrləri dəyişdirildikdə, əldə edilmiş meshın ləğv edilməsi lazımdır. Fərziyyə budur ki, çox vaxt bu xəritə parametrləri parametrləri birdən çox göstərmə zəngləri ilə eyni qalır.

Mesh təbəqələrinin yüklənməsi inteqrasiya olunmuş brauzer paneli və / və ya vahid əlavə qat dialoqu vasitəsilə mümkün olmalıdır.

Bir mesh təbəqəsi yükləndikdən sonra, yuxarıdakı GUI mockuplarına bənzər göstərici konfiqurasiyasına sahib, vektor / raster qatları üçün olanlara bənzər bir xəritə qatı xüsusiyyətləri dialoquna sahib olacaqdır.


Videoya baxın: qgis python - QGIS Python Console. Introduction to PYQGIS