Yinelenenler oluşturmadan QGIS'deki öznitelik tablosuna Excel'den veri mi katılıyor?


15

QGIS iki boş alan içeren bir öznitelik tablo var.

Örnek 1

QGIS boş alanları doldurmak için bir excel veritabanı almak istiyorum. Excel dosyam QGIS öznitelik tablomdaki sütunlarla eşleşiyor.

Example_2

Excelime (.CSV) şekil dosyama düzgün bir şekilde katılabilirim. Ancak süreç, boş alanları istediğim gibi doldurmak yerine kopyalar oluşturdu. «Masa Yöneticisi» yardımıyla durumu düzeltebiliyorum, ancak çok zaman alıyor. Excel verilerime katılmak için daha verimli bir yol arıyorum.

Example_3

Excel dosyası kopyaları oluşturmadan nitelik tabloma nasıl katılabilirim?


3
Bu eğiticiye bir göz atın: Tablo Birleşimlerini Gerçekleştirme
ArMoraer

Yanıtlar:


13

Hayatı kolaylaştırmak için aşağıdakileri yaparım:

Bunu yapmadan önce şekil dosyanızın bir yedeğini alın.

  1. Şekil dosyanızda katman özelliklerine / alanlarına gidin ve düzenleme modunu açın.
  2. Kimlik alanı dışındaki tüm alanları seç
  3. Kimlik Alanı dışındaki tüm alanları silme
  4. csv dosyanızı QGIS'de katman olarak ekleme (Ana menü / Katman / Katman Ekle / Sınırlandırılmış metin katmanı ekle) resim açıklamasını buraya girin(geometri yok seçin)
  5. şekil dosyanızda özellikleri / birleştirmeleri seçin ve kaynak ve hedef için her iki kimlik alanını da seçin. Bu sorunun diğer cevabında açıklandığı gibi.
  6. Değiştirilmiş Shapefile kaydedin.

resim açıklamasını buraya girin

bu bahsettiğim Alan sekmesi

resim açıklamasını buraya girin

Gereksiz alanı silmeden önce ve sonra düzenlemeyi değiştirmeyi unutmayın


13

Excel dosyasını şekil dosyasına birleştirmek isteyeceksiniz. Bunları ortak bir öznitelikte birleştireceksiniz ve sonuç, her kaydın hem şekil dosyasının hem de excel dosyasının özniteliklerini tuttuğu birleştirilmiş bir katman olacaktır.

Tamam önce excel dosyanızı ve vektörünüzü daha sonra katmanlara yüklersiniz. Yaptığım bazı test verilerini kullandım, ancak kurulumunuz aşağıdakine benzer olmalıdır. resim açıklamasını buraya girin

Şimdi katmanı sağ tıklayın (katmanlar panelinde) ve özellikleri seçin, ardından birleştir'i seçin. Önce sol alttaki yeşil + işaretine basın (aşağıdaki resimde Büyük Kırmızı Ok) ve yeni bir Vektör Ekle Ekle menüsünü getirecektir (aşağıdaki gibi) Burada birleştirme katmanınız excel dosyası olacaktır (bu yüzden uygun excel dosyasını seçin & sheet) birleştirme alanı excel dosyasındaki şekil dosyasının ortak niteliğini tutan alandır. Hedef alan, şekil dosyasındaki eşleşen alandır. (benim durumumda her iki ortak alan da birim olarak adlandırıldı, ancak alan şekil dosyasında UNIT_ olarak adlandırılmış olsaydı, hedef alanım için UNIT yerine bunu kullanırdım)
resim açıklamasını buraya girin Sadece belirli alanları görmek istiyorsanız, vb. Katılmak gibi karışıklık yapabileceğiniz birkaç seçenek daha var ... yine de şimdi katıldılar ve geri dönüp şekil dosyasının niteliklerine bakacaksınız şimdi excel dosyasının aşağıdaki gibi karşılık gelen özniteliklerine sahiptir.

resim açıklamasını buraya girin

İşte size adım adım nasıl yapılacağını gösteren birkaç kullanışlı öğretici:

https://www.mapbox.com/tilemill/docs/guides/joining-data/

http://maps.cga.harvard.edu/qgis/wkshop/join_csv.php

http://qgis.spatialthoughts.com/2012/03/using-tabular-data-in-qgis.html

QGIS'de şekil dosyasının öznitelik tablosu ile harici tablolara nasıl katılırım?

http://www.digital-geography.com/qgis-tutorial-ii-how-to-join-data-with-shapefiles/#.Vs9vpmHXKUk

ve yorumlarda bahsedilen ArMoraer öğreticisi.


Bu arada, mapbox.com/tilemill/docs/guides/joining-data öğreticisine baktım . Ancak, hala DBF dosyama şekil dosyama katılamıyorum. Beni şaşırtıyor çünkü her iki masa yapım da mükemmel şekilde uyuyor. «Katılma alanı» ve «Hedef alanı» anlamsız gibi görünüyor. Daha fazla ayrıntı ekleyebilir misiniz lütfen?
Laurent Robitaille-Lainesse

1
@Laurent Robitaille-Lainesse Yazımı daha adım adım kılavuzla güncelledim. Adımlarımın doğru olduğundan emin olmak için bir test excel dosyasını bir çokgen şekil dosyasına kattım.
ed.hank

Excel dosyamı QGIS'e düzgün bir şekilde katılmayı başardım. «Join» seçeneğinin özellik tablosuna yeni bir alan eklediğini gözlemliyorum. Yanlışsam beni düzeltin, ancak excel dosyamdaki verileri öznitelik tablomdaki boş alana eklemek imkansız görünüyor.
Laurent Robitaille-Lainesse

1
Boş bir alanınız varsa, yeni katılmış alandan tablonuzdaki alana doldurmak için alan hesaplayıcısını kullanırsınız.
ed.hank

10

Sadece başka bir yöntem eklemek için, yüklendiğinde bir Project makrosu oluşturabilirsiniz:

  1. Şekil dosyanızı otomatik olarak CSV'nize ekler
  2. IP1Ve IP2alanlarını günceller
  3. Birleştirilmiş alanları kaldırır, yalnızca şekil dosyasının alanlarını bırakır (örn. Dulplicate yok)

İlk olarak, henüz yapmadıysanız bir proje oluşturun ve araç çubuğuna gidin:

Proje> Proje Özellikleri ...> Makrolar

Ardından def openProject():işlevde aşağıdaki kodu kullanın ve katmanlarınızın adlarını ve birleştirilmesini istediğiniz alanları girin. Shapefile ve csv dosyam için alanla birlikte "Örnek" ve "elektronik tablo" kullandım ID:

from PyQt4.QtCore import *
import qgis
from qgis.core import QgsMapLayerRegistry, QgsVectorJoinInfo

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    # Change to your shapefile name
    if layer.name() == "Example":
        qgis.utils.iface.setActiveLayer(layer)
        shp = qgis.utils.iface.activeLayer()

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    # Change to your csv name
    if layer.name() == "spreadsheet":
        qgis.utils.iface.setActiveLayer(layer)
        csv = qgis.utils.iface.activeLayer()

# Set up join parameters
shpField='ID'
csvField='ID'
joinObject = QgsVectorJoinInfo()
joinObject.joinLayerId = csv.id()
joinObject.joinFieldName = csvField
joinObject.targetFieldName = shpField
shp.addJoin(joinObject)

# Define fields to update and joined fields to copy values from
ip1 = shp.fieldNameIndex('IP1') 
ip1_join = shp.fieldNameIndex('spreadsheet_IP1')
ip2 = shp.fieldNameIndex('IP2') 
ip2_join = shp.fieldNameIndex('spreadsheet_IP2')

shp.startEditing()
for feat in shp.getFeatures():
    shp.changeAttributeValue(feat.id(), ip1, feat.attributes()[ip1_join])
    shp.changeAttributeValue(feat.id(), ip2, feat.attributes()[ip2_join])
shp.commitChanges()

# Remove join 
shp.removeJoin(csv.id())

Proje makrosu

Emin katmanlar olduğunu Make değil katıldı projeyi kaydetmek ve makroları etkinleştirmek araç çubuğuna giderek:

Ayarlar> Genel> Makroları etkinleştir


Şimdi projeyi kapatıp csv dosyasını düzenlediğinizde, projeyi bir sonraki yüklemenizde alanlar otomatik olarak güncellenmelidir:

Csv dosyasını düzenleme

Sonuçlar


7

Benim önerim, Excel dosyanızı düzenlemek ve .dbf dosyası oluşturmak için açık kaynaklı LibreOffice / Open Office kullanmaktır. Sizin için test çalışma kitabı hazırladım. Test çalışma kitabı - bağlantı

  1. Dosyayı Libre Office / Open Office'te açın.
  2. Excel dosyanızdan "Excel" sayfa verilerine yapıştırın.
  3. .Dbf dosyanızdaki "DBF" sayfa verilerine yapıştırma (yalnızca yapıştırma kimliği, X, Y) (IP1, IP2 değerleri otomatik olarak eklenecektir).
  4. Name.dbf dosyası olarak kaydedin (burada ad, şekil dosyanızın adıyla aynıdır).

QGIS'de kopyalar olmadan sonuç tablosu: resim açıklamasını buraya girin


5

Oradaki boş alanlar neden başlıyor? Boş alanlar olmadan başlayabilir ve birleştirmede üretilen iki sütunu kullanabilir misiniz? Bence bu en basit yaklaşım. Ya bu ya da ArcGIS'teki "Yükle" aracına benzer bir araç bulun.

https://desktop.arcgis.com/en/arcmap/latest/extensions/production-mapping/loading-data-into-a-geodatabase.htm

Bir coğrafi veritabanı kullanmıyorsanız, bunu şiddetle tavsiye ederim.


Bir coğrafi veritabanı kullanmıyorum. Aslında, onunla familliar değilim.
Laurent Robitaille-Lainesse

1
@ LaurentRobitaille-Lainesse Yeni bir dosya coğrafi veritabanı, ardından bunun içinde yeni bir özellik sınıfı oluşturmanızı ve verilerinizi depolamak için bunu kullanmanızı şiddetle tavsiye ederim. Ayrıca, coğrafi veri tabanları ve özellik sınıfları ve bunları neden kullandığımız, şekil dosyalarının ötesinde sundukları hakkında kısa bir araştırma yapmanızı öneririm.
Stella

4

.BBF (veritabanı dosyası) özniteliği tarafından bu .shp dosya desteği beri yinelenmeden katılmak için doğrudan bir yol olup olmadığını bilmiyorum. Bu DBF, uzunluğu ve kesinliğinin ayrıntılarıyla tamsayı, gerçek, dize, vb. Gibi sütun türü bildirimlerine sahiptir. CSV dosyasında yalnızca herhangi bir tür bildirilmeden normal sütun bulunur. Dosyanızın ne kadar büyük olduğunu bilmiyorum. Benim için, yinelenen Alanlar tutacak ve daha sonra genel formül ile alan hesaplayıcısı kullanarak :

Orijinal Field_x = Yinelenen Field_x

Ardından tüm bu yinelenen alanları silin (QGIS veya veritabanı programı aracılığıyla)


3

Bunu düzeltmenin en kolay yolunun, birleştirmeden önce söz konusu iki sütunu QGIS tablosunda silmek olacağına inanıyorum. Daha sonra, şekil dosyasına katıldığınızda, istediğiniz iki sütun yinelenmez ve orijinal sütun adlarını korur.

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.