Daha çox

QGIS istifadə edərək iki vektor təbəqəsi arasında əlavə və yeniləmələrin tapılması


QGIS istifadə edirəm.

6 ay aralığında yaradılan iki vektor məlumat ixracatım var.

6 ayda əlavə edilmiş yeni obyektləri və orijinal obyektlərdə atribut dəyişikliklərini necə tapa bilərəm?

Asset_id sahəsi hər iki cədvəldə bənzərsiz bir identifikator kimi mövcuddur və hər iki cədvəldə keçəcəkdir. Həndəsə dəyişikliklərini almaq üçün "Fərq" alətindən istifadə edə bilərəm, atribut cədvəlində dəyişiklikləri də ala bilmirəm.


QGIS-də bir sıra seçimləriniz var:

  1. EtibarənAlət qutusu işlənirOrfeo's istifadə edinÇox dəyişkənAlterationDetector(tapmaq üçün axtarış qutusuna 'dəyişdir' yazın) - sənədlərə baxın.
  2. EtibarənAlət qutusu işlənirSAGA-nın Dəyişiklik Algılama alətindən istifadə edin (yuxarıdakı kimi tapın).
  3. Çəmən birr.change.infomodul, lakin standart bir QGIS yükləməsini görə bilməyəcəksiniz (GRASS alətlərinin genişləndirilməsi üçün bu sayta baxın - bu barədə bir neçə yazı olduğunu xatırlayıram).
  4. Özünüz həll edin. Bütün ArcGISAləti birləşdirinedərkən 'əvvəl' və 'sonra' rasterlərindəki kodların birləşməsini təmsil edən yeni bir kod təyin etməkdir. Bunu kopyalamaq çox sadədir. Deyək ki, kodlarınız 1-99 arası işləyən tam ədədlərdir. Sadəcə bir dəsti böyük bir dəyərə vurun (deyin 100) və sonra raster kalkulyatorundakı iki rasteri əlavə edin. (Deyək) 1 koduna sahib olan və dəyişməyən bir sahə 101 çıxış kodu əldə edəcək və s. Beləliklə, 'palindromik' olan hər hansı bir kod dəyişməzdir və dəyişdirilməyən hər hansı bir koddakı 'əvvəl' və 'sonra' vəziyyətlərini əhatə edir (buna açıq şəkildə nail olmaq üçün kifayət qədər böyük bir çarpan seçin - buna görə də bizim nümunəmizdə 10-un çarpanı kifayət deyil, 100-ü və ya 1000-i yaxşıdır). Beləliklə, xəritənizi dəyişməmiş bütün sahələr üçün tez bir zamanda tərtib edə bilərsiniz (bütün palendromik nömrələri eyni üslubda verərək) və yalnız dəyişiklikləri vurğulaya bilərsiniz.

Rasters dəyişiklik aşkarlanması üçün daha yaxşı uyğun gəlir, beləliklə vektorları rasterlərə çevirməyiniz və yuxarıdakı variantları izləməyiniz məsləhət görülür. Vektorları nədənsə istifadə etməlisinizsə, vektorları kəsişdirin (müvafiq kod sahələrini saxlamağınızı təmin edin). Daha sonra poliqonlarınızı 'əvvəl' və 'sonra' kodlarının uyğun olub olmadığını etiketləyə bilərsiniz. Vektorların istifadəsi şalvarlarla nəticələnə bilər, buna görə çoxbucaqlılara dair bir kontur olmayan bir üslub, xəritənizdəki səs-küyün azaldılması üçün ən yaxşısı olardı (yuxarıdakı rasterin xarici görünüşünə çox oxşayacaq, buna görə də ...). Diqqət yetirin, əgər vektorlarınız fərqli sahələri əhatə edirsə, Birlik alətinə baxmaq istəyə bilərsiniz - hər iki halda daVector-> Geoprosessinq Alətləri


QGIS üçün bir vasitə varDataset dəyişikliklərini aşkarlayınmövcuddur (QGIS 3.12 ilə təqdim olunur):

https://www.qgis.org/en/site/forusers/visualchangelog312/index.html#feature-add-new-algorithm-detect-dataset-changes

https://docs.qgis.org/testing/en/docs/user_manual/processing_algs/qgis/vectorgeneral.html#detect-dataset-changes-312

Bu aləti istifadə edərək iki vektor qatınızı giriş olaraq seçə bilərsiniz (Orijinal qatYenidən işlənmiş qat) və müqayisə etmək istədiyiniz sahələri seçin (Atributlar uyğun gəlir).

Bu alətin çıxışı aşağıdakı ekran görüntüsündə göstərildiyi kimi üç qatdır (dəyişməz, əlavə edilmiş və silinmiş xüsusiyyətlər).


Aşağıdakı skript iki qat arasındakı dəyişiklikləri aşkarlamağınıza kömək edə bilər eyni quruluşa sahibdir.

Alqoritm aşağıdakı kimi işləyir:

  • müqayisə ediləcək qatlara istinad alın
  • daha sürətli daxil olmaq üçün ümumi unikal identifikatorlarını bir diktə yaz
  • yeni versiyada köhnə identifikatorlar dəstində olmayan bəzi identifikatorların olub olmadığını yoxlayın
  • əvvəlcə həndəsə ilə eyni hündür identifikatorlara malik olan digər xüsusiyyətləri müqayisə edin və həndəsə bərabərdirsə, sahə əsasında bir sahəyə görə
  • yeni qatdakı bütün aşkar edilmiş xüsusiyyətləri seçin

Seçilmiş xüsusiyyətləri yeni bir təbəqəyə yazmaq üçün "yalnız seçilmiş" seçimi ilə "qatı saxla".

Tapılan fərqləri daha ətraflı şəkildə bildirmək üçün ssenari genişləndirilə bilər, məsələn. daha həndəsə və ya atribut fərqlidir və hansı xüsusiyyətlər.

Ssenarini çalıştırmak üçün dəyişdirin köhnə_layer_adıyeni_layer_name sətir 2-3-də kodu kopyalayın və Python konsoluna yapışdırın.

# qat almaq köhnə = QgsMapLayerRegistry.instance (). mapLayersByName ('old_layer_name') [0] new = QgsMapLayerRegistry.instance (). mapLayersByName ('new_layer_name') [0] # açar sahə və xüsusiyyət id üçün daha sürətli {feat ['asset_id']: feat.id () old.getFeatures ()} new_feats = {feat ['asset_id']: feat.id () in new.getFeatures ()} # yeni fidi müqayisə et köhnə fid ilə; yeni fiqurda olan #, lakin köhnədə olmayan yeni xüsusiyyətlər yeni xüsusiyyətləri təmsil edir old_fid = set (old_feats.keys ()) new_fid = set (new_feats.keys ()) added_fid = new_fid.difference (old_fid) # xüsusiyyətləri köhnə versiyadan bəri əlavə edilmişdir added_ids = [new_feats [fid] for fid in added_fid] # xüsusiyyətlər köhnə VƏ yeni setdə olmaq exist_fid = new_fid.difference (added_fid) # field_count = len (new.dataProvider (). field ()) # ilə müqayisə etmək üçün sahələrin sayını əldə edin dəyişdirilmiş xüsusiyyətlər üçün siyahı dəyişdirildi_id = [] # qalanları fid ilə birləşdirin və mövcudluq üçün sahə üzrə sahələrə görə müqayisə edin: old.setSelectedFeatures ([old_feats [fid]]) new.setSelectedFeatures ([new_feats [fid]]) old_feat = old .selectedFeatures () [0] new_feat = new.selectedFeatures () [0] # old_feat.geometry () bərabərdirsə həndəsəni və sahələri müqayisə edin. (new_feat.geometry ()): aralığında fi üçün (field_count): old_feat [fi ]! = new_feat [fi]: changed_ids.append (new_feats [fid]) break else: changed_ids.append (new_feats [fid]) # əlavə edilmiş və dəyişdirilmiş xüsusiyyətlərin siyahısını birləşdirin diff_ids = list (added _ids) diff_ids.extend (changed_ids) # bütün fərqli xüsusiyyətləri seçin new.setSelectedFeatures (diff_ids) # prosesi sadələşdirmək üçün yalnız seçilmiş seçim ilə yeni nəticə qatına yenisini qeyd edin.


Videoya baxın: Tutorial N 25: GeoCoding plugin using Qgis (Oktyabr 2021).