Daha çox

Proqramlı şəkildə (PyQgis vasitəsilə) shapefile ilə cədvəl sahəsinə qoşulun?

Proqramlı şəkildə (PyQgis vasitəsilə) shapefile ilə cədvəl sahəsinə qoşulun?


Aşağıdakılar, Qgisdəki bir şəkil şəklinə qoşulmaq üçün bir masa sahəsini yerinə yetirməkdə müvəffəqiyyətsizdir.
Birləşmə obyektinin bütün nümunələri müvafiq dəyərləri çap edəcək və işlənərkən heç bir səhv işarələnməyəcək - ancaq hədəf qat heç bir təsir göstərmir.

Nəsə çatışmır?

Heads = QgsVectorLayer (headCSV, 'Heads', 'ogr') QgsMapLayerRegistry.instance (). AddMapLayer (Heads) self.iface.legendInterface (). SetLayerVisible (Heads, False) grid = ftools_utils.getMapLayer '(Grid) ) joinObject = QgsVectorJoinInfo () joinObject.targetFieldName = str ('ID') joinObject.joinLayerID = Heads.id () joinObject.joinFieldName = str ('cellID') grid.addJoin (joinObject) grid.reload ()

YENİLƏNİB:

Aşağıdakılar "Heç biri" ni qaytarır. Gözləyirəm ki, bu, həqiqətən də qoşulacaq sahə adlarını geri qaytarmalıdır? (məsələn - səhvin ipucu)

joinObject.joinFieldNamesSubset () çap edin

ƏLAVƏ YENİLƏNİŞ:

Aşağıdakılar əlavə edildi və indi əvvəlki yeniləmə əmri birləşdiriləcək dəqiq sahələri qaytarır - lakin təyinat təbəqəsi 'birləşdirilmiş' sahələrini göstərmir ...

joinObject.setJoinFieldNamesSubset (['someFieldName'])

Bu mənim üçün işləmişdir:

# Giriş (csv) və hədəf (Shapefile) qatlarını alın = QgsVectorJoinInfo () joinObject.joinLayerId = csv.id () joinObject.joinFieldName = csvField joinObject.targetFieldName = shpField shp.addJoin (joinObject)

Qarşılaşdığınız səhv, inanın və ya inanmayın, yazım səhvidirjoinLayerId. Sual budur ki, QGIS niyə ora səhv salmır?


Bunun üçün İşləmə alqoritmlərindən istifadə etməyiniz düzgündürsə, bu qədər sadədir (QGIS Python konsolundan):

idxal emalı res = emal output.shp ") qat = QgsVectorLayer (res ['OUTPUT_LAYER']," birləşdirilmiş qat "," ogr ") QgsMapLayerRegistry.instance (). addMapLayer (qat)

Alqoritm mənbə koduna baxa bilərsiniz ki, onu öz skriptinizə uyğunlaşdırmaq istəyinizə qərar verin.


Əla bir nümunə, çox faydalı oldum, bir shp -ni bir csv faylı ilə birləşdirin, burada mənim nümunəm yerinə yetirildi:


idxal emalı res = processing.runalg ("qgis: joinattributestable", "d: /areas_geoestadisticas_estatales.shp", "d: /poblacion.csv", "cve_ent", "cve_ent", "d: /union_shp_csv.shp") təbəqəsi = QgsVectorLayer (res ['OUTPUT_LAYER'], "Ölçü Ölçüsü", "Ogr") QgsMapLayerRegistry.instance (). AddMapLayer (qat)


Videoya baxın: PyQGIS print field names