Shapefile, nitelik ve geometri dahil CSV'ye dönüştürülsün mü?


21

60k + girişli, hepsi karşılık gelen özelliklere sahip çokgenler olan (dönüm toplamları, toprak sahibi adları, vergi numarası #'ler, vb.) Bir şekil dosyam var. Sonunda ihtiyacım olan şey, bu özelliklerin hepsine ve karşılık gelen geometrisine sahip bir CSV dosyası (KML uyumlu xyz biçiminde, yani WKT biçiminde değil).

.Dbf dosyasını Excel'de açabileceğimi ve öznitelikleri alabileceğimi biliyorum. Ayrıca QGIS'deki shapefile'i açabileceğimi ve verileri Excel'e kopyalayabileceğimi biliyorum, bu da bana özellikleri ve WKT geometrisini kazandırıyor.

Shapefile'ı, niteliği ve Google Earth dostu geometrisi ile CSV'ye (Excel'de açılabilir) dönüştürmenin basit bir yolu var mı?


Spesifikasyonlarınızı yerine getirmek için bir uygulama veya komut dosyası oluşturulmalıdır. Zor olduğunu sanmıyorum ama önemsiz olmadığını da düşünüyorum. Bunu yapmak görevim olsaydı, muhtemelen böyle bir iş için tam gün 1 hafta tahmin edeceğim.
Stephen Quan

3
Teşekkürler, bu yardımcı olur. Bu biraz çılgınca. Dosya boyutum o kadar büyük olmasaydı, Google’dan otomatik olarak yapabilirdim. Genelde bunu nasıl yaparım, Google Earth’e bir .shp dosyasını içe aktarıp .kml olarak kaydederim. Ardından .kml’yi Google Fusion Tables’a yüklüyorum (FYI: Google Fusion Tables’in 100 mb yükleme sınırı var) ve .csv’ye aktarıyorum. Sonra istediğim gibi .csv ile oynayabilirim - nitelikleri değiştirebilir, koordinatlara sahip olduğum yeni poligonları ekleyebilirim, vs., vb. - ve sonra yeni kaydedilen .csv dosyasını Google Fusion Tables'a yeniden yüklerim. ve Google Earth’te açın.
Rikk

Öyleyse, sanırım soru şu olur ... Bir .shp dosyasını nasıl ikiye bölerim? Bu, tek tek .kml dosyalarını 100 mb sınırının altına almama izin verir ve yukarıda belirtilen yöntemi dönüştürmek için kullanabilirim.
Rikk

1
Soruyu aşağıda sorduğum gibi cevapladım, ancak yorumunuzu gördüm. Niçin csv'ye ihtiyacınız var? Neden nitelik düzenleme, CBS’de yeni çokgenler ekleme vb. Yapmıyorsunuz (QGIS’iniz olduğunu söylediniz) ve sonra bunu son KML’nize aktarıyorsunuz?
user2856

@Rikk - yorumunuzdaki soruya cevap olarak: Bir şekil dosyasını bölmenin basit bir yolu, şekil dosyanızın bir kısmında uzamsal bir seçim yapmak ve ardından katmanınızı sağ tıklayıp "Dışa Aktar" seçeneğini seçmek olacaktır. Daha sonra seçilen özellikleri yeni, daha küçük bir şekil dosyasına verebilirsiniz. Bu kesinlikle bilimsel değil, ama basit. Alternatif olarak, daha organize bir yaklaşım istiyorsanız, bazı özelliklere göre seçebilirsiniz.
Radar

Yanıtlar:


28

İşte OGR python bağlarını kullanan basit bir betik :

import ogr,csv,sys

shpfile=r'C:\Temp\test.shp' #sys.argv[1]
csvfile=r'C:\Temp\test.csv' #sys.argv[2]

#Open files
csvfile=open(csvfile,'wb')
ds=ogr.Open(shpfile)
lyr=ds.GetLayer()

#Get field names
dfn=lyr.GetLayerDefn()
nfields=dfn.GetFieldCount()
fields=[]
for i in range(nfields):
    fields.append(dfn.GetFieldDefn(i).GetName())
fields.append('kmlgeometry')
csvwriter = csv.DictWriter(csvfile, fields)
try:csvwriter.writeheader() #python 2.7+
except:csvfile.write(','.join(fields)+'\n')

# Write attributes and kml out to csv
for feat in lyr:
    attributes=feat.items()
    geom=feat.GetGeometryRef()
    attributes['kmlgeometry']=geom.ExportToKML()
    csvwriter.writerow(attributes)

#clean up
del csvwriter,lyr,ds
csvfile.close()

EDIT: ve CSV’nizden KML’ye dönüştürmek için başka bir komut dosyası

import ogr,csv,sys,os
ogr.UseExceptions()

csvfile=r'C:\temp\test.csv' #sys.argv[1]
kmlfile=r'C:\temp\test.kml' #sys.argv[2]

csvreader=csv.reader(open(csvfile,'rb'))
headers=csvreader.next()

ds = ogr.GetDriverByName('KML').CreateDataSource(kmlfile)
lyr = ds.CreateLayer(os.path.splitext(os.path.basename(kmlfile))[0])

for field in headers[:-1]: #skip kmlgeometry
    field_def = ogr.FieldDefn(field)
    print lyr.CreateField(field_def)

for rec in csvreader:
    feat = ogr.Feature(lyr.GetLayerDefn())
    for i,field in enumerate(headers[:-1]): #skip kmlgeometry
        feat.SetField(field, rec[i])
    feat.SetGeometry(ogr.CreateGeometryFromGML(rec[-1]))
    lyr.CreateFeature(feat)

del lyr,ds

Bu bağlamaların nasıl kullanılacağı hakkında daha fazla bilgi verebilir misiniz?
Andrew S

8

Eğer şekil dosyasını spatialite dönüştürürseniz, aşağıdakileri yapabilmelisiniz:

1) Çıktıyı test etmek için SQL ile deneme yapın:

ex.

SELECT col1, col2, col3, AsKml (geometry_column) FROM sekmesinden

2) Sonuçtan memnun kaldığınızda, CSV formatına aktarabilirsiniz:

/programming/5776660/export-from-sqlite-to-csv-using-shell-script

Spatialite hakkında daha fazla bilgi için:

https://www.gaia-gis.it/fossil/libspatialite/index

Spatialite SQL işlevleri:

http://www.gaia-gis.it/gaia-sins/spatialite-sql-3.0.0.html


3

QGIS üzerinde çalışıyorsanız, hemen -> Farklı Kaydet -> CSV katmanlarına sağ tıklayarak bir CSV belgesi oluşturabilirsiniz.

ArcMap ile çalışıyorsanız, KML aracını kullanarak Katman aracını kullanarak KML'yi dışa aktarabilirsiniz (programda Aramaya Git seçeneği). Bazı nedenlerden dolayı, bir KML yerine bir KMZ üretir (en azından benim durumumda olan buydu).

Bir KMZ'yi KML'ye dönüştürmek için:

  • KMZ dosyanızı Google Earth’e aktarın ve katmanınıza sağ tıklayın ve KML olarak kaydedin
  • QGIS’i açın ve KML dosyasını sürükleyip bırakın; katmanı otomatik olarak yükler (> QGIS 2.10 PISA)
  • Dosyaya sağ tıklayın ve CSV olarak kaydedin

ArcGIS ile çalışıyorsanız, bu işlem daha uzundur, ancak QGIS'de zaman kaybetmeden yapılabilir. Her durumda QGIS'i kurmanız gerekecek.


QGIS için çözümünüzü sınayın ve işe yaramadı. CSV olarak kaydet, uzamsal bileşeni korumaz.
Philipp Schwarz,

QGIS, dışa aktarma sırasında WKT'yi seçme seçeneği sunar - bu, WKT formatındaki geometriyi (uzamsal bileşen) şekil dosyasındaki diğer özelliklerle birlikte verir.
kozyr,

QGIS 3,0 itibaren ihracat diyalog “Katman Seçenekler” altında “geometri” açılır listesinde arar ve seçecektir AS_XY, AS_XYZyaAS_WKT
Leo

2

Aşağıdaki ogr2ogrgibi komut satırında kullanabilirsiniz :

ogr2ogr -f CSV output.csv input.shp -lco GEOMETRY=AS_XYZ

lcobence “katman oluşturma seçenekleri” içindir. Diğer mevcut seçenekler burada belgelenmiştir: http://www.gdal.org/drv_csv.html


Leo, Hata 1 can'ti katmanını 'GEOMETRİ = AS_XYZ' istenilen getirme" olsun ben QGIS dosyayı getirmek ve açıkça bir vektör ülke hatlarını içeren görebilirsiniz..
Andrew S


-1

sadece ark haritadaki dönüştürme aracına gidin. sonra excel için masaya gidin. bir excel dosyası yapılır. excel doc .csv dosyasına dönüştürmek

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.