bir shapefile öznitelik tablosunu başka bir dbf tablosundaki değerlerle güncelle


10

Burada ne yapmaya çalıştığımı açıklamaya çalışıyorum:

Aynı alanları olan bir shapefile ve bir bağımsız dbf tablo var. Dbf tablosunda tüm alanlar doldurulur, ancak shapefile öznitelik tablosunda yalnızca bir tanesine "OneField" adını verelim. Ne yapmak istiyorum "OneField" (Shapefile) değerleri "OneField" (dbf tablo) değerleri ile aynı olup olmadığını denetlemek ve eğer öyleyse, shapefile öznitelik tablosundaki kalan boş alanları olanlar ile doldurmak için bağımsız dbf tablosunda.

Şu anda sadece bağımsız dbf tablodan shapefile öznitelik tablosuna değerleri kopyalamaya çalışıyorum ama ben sıkışıp kaldım. Bana yardım edebilir misin lütfen?

İşte kod:

import arcpy

table = "link/to/table.dbf"
fc = "link/to/shapefile.shp"

# Create a search cursor

rowsTable = arcpy.SearchCursor(table)

# Create an update cursor

rowsFc = arcpy.UpdateCursor(fc) 

for row in rowsTable:
    row = row.getValue("OneField")
    valueTable = row
    for row in rowsFc:
        row = row.setValue("OneField", valueTable)
        rowsFc.updateRow(row)
        row = rowsFc.next()
    row = rowsTable.next()    

del row, rowsFc, rowsTable

Çok teşekkür ederim


1
Düzeltmek veya bilgi eklemek için orijinal sorunuzu düzenleyebilirsiniz.
Brad Nesom

.next () içeren tüm satırları çıkarmaya çalışın, arkpy ile satırlar yinelenebilir, üzerlerindeki döngüler için "için", .next ()
gotchula

Yanıtlar:



3

Kod açısından bakıldığında, bazıları gereksiz gibi görünen bir grup (~ 4) farklı şey için "satır" kullanıyorsunuz. Arcpy ile pek bir şey yapmıyorum, ama bunun daha iyi çalışacağını hayal ediyorum. Eğer öyleyse, FC'nizdeki tüm OneField sütununu tablonuzdan son OneField değeriyle doldurmuş olursunuz:

for rowT in rowsTable:
    valueTable = rowT.getValue("OneField")
    for rowF in rowsFc:
        rowF.setValue("OneField", valueTable)
        rowsFc.updateRow(rowF)
        rowF = rowsFc.next()
    rowT = rowsTable.next() 

neuhausr, çok teşekkür ederim, nasıl koyduğunuz iyi çalışıyor
Bogdan Palade


2

Verileri dbf'den şekil dosyasına taşıma yöntemi. (Tabii ki bunu bir gui yazılımı içinde yapmayı tercih ediyorum) dbf'yi şekil dosyasına birleştirmektir.

Bu noktada normalde null olmayan nitelikleri seçerim (bunu ikinci tablonun id alanında yaparım). Eğer null değillerse eşleştiler.

Bu yapıldıktan sonra değerleri shapefile.onefield <> table.onefield ile seçebilirsiniz.

Ardından hesaplamanızı şekil dosyasında çalıştırın.


-1

Sorunuzu cevaplamadığınız için özür dilerim, ama bunu kesinlikle db ortamında yapardım. Özellikle çok fazla veri varsa, bu muhtemelen çok daha hızlı olacaktır.

Örneğin bir PostGIS db içine shapefile ve dbf yüklerseniz, sorgunuz şöyle görünebilir:

CREATE TABLE new_table AS
SELECT a.the_geom, a.populated_field, b.populated_field2, b.populated_field3
FROM shape_table a LEFT JOIN dbf_table b ON a.populated_field=b.populated_field1;

Birleştirme alanlarına dizin koyarsanız, bu çok hızlı olmalıdır. Elbette bunun yerine shape_table dosyasını güncelleyebilirsiniz, ancak orijinal verileri yok etmemek yerine yeni bir tablo oluşturmak isteyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.