แปลง shapefile เป็น CSV รวมถึงคุณลักษณะและรูปทรงเรขาคณิตหรือไม่


21

ฉันมี shapefile พร้อมรายการ 60k + ซึ่งทั้งหมดเป็นรูปหลายเหลี่ยมที่มีแอตทริบิวต์ที่สอดคล้องกัน (ยอดรวมเอเคอร์ชื่อเจ้าของที่ดินหมายเลขประจำตัวผู้เสียภาษี # ฯลฯ ) สิ่งที่ฉันต้องการในที่สุดคือไฟล์ CSV ที่มีแอตทริบิวต์เหล่านี้ทั้งหมดและรูปทรงเรขาคณิตที่สอดคล้องกัน (ในรูปแบบ xyz ที่รองรับ KML นั่นคือไม่ใช่รูปแบบ WKT)

ฉันรู้ว่าฉันสามารถเปิดไฟล์. dbf ใน Excel และรับคุณลักษณะได้ ฉันยังรู้ว่าฉันสามารถเปิด shapefile ใน QGIS และคัดลอกข้อมูลไปยัง Excel ซึ่งทำให้ฉันมีคุณสมบัติและรูปทรงเรขาคณิต WKT

มีวิธีง่าย ๆ ในการแปลง shapefile เป็น CSV (openable ใน Excel) ด้วยแอตทริบิวต์และเรขาคณิตที่เป็นมิตรของ Google Earth หรือไม่


เพื่อให้เป็นไปตามข้อกำหนดของคุณจะต้องมีการสร้างแอปพลิเคชันหรือสคริปต์ ฉันไม่คิดว่ามันยาก แต่ฉันไม่คิดว่ามันไม่สำคัญ ถ้าฉันเป็นงานที่ต้องทำฉันอาจจะประมาณงานเต็มเวลา 1 สัปดาห์สำหรับงานดังกล่าว
— Stephen Quan

3
ขอบคุณสิ่งนี้มีประโยชน์ แม้ว่ามันจะบ้าไปแล้วก็ตาม หากขนาดไฟล์ของฉันไม่ใหญ่มากฉันสามารถทำได้โดยอัตโนมัติผ่าน Google โดยทั่วไปแล้วฉันจะทำสิ่งนี้ได้อย่างไรโดยการนำเข้า. shp ไปยัง Google Earth และบันทึกเป็น. kml จากนั้นฉันจะอัปโหลด. kml ไปยัง Google Fusion Tables (FYI: Google Fusion Tables มีขีด จำกัด การอัปโหลดที่ 100 mb) และส่งออกไปยัง. csv จากนั้นฉันสามารถเล่นกับ. csv ได้ตามต้องการ - เปลี่ยนคุณลักษณะเพิ่มรูปหลายเหลี่ยมใหม่ที่ฉันมีพิกัดสำหรับ ฯลฯ และจากนั้นฉันอัปโหลด. csv ไปยังตารางฟิวชั่นของ Google ที่บันทึกใหม่แล้วส่งออกเป็น. kml และเปิดใน Google Earth
— Rikk

ดังนั้นฉันจึงเดาว่าคำถามจะกลายเป็น ... ฉันจะแบ่งไฟล์. shp เป็นสองส่วนได้อย่างไร สิ่งนี้จะทำให้ฉันได้รับไฟล์. kml แต่ละไฟล์ภายใต้ขีด จำกัด 100 mb และฉันสามารถใช้วิธีการดังกล่าวเพื่อแปลง
— Rikk

1
ฉันตอบคำถามตามที่ถามด้านล่าง แต่เพิ่งเห็นความคิดเห็นของคุณ ทำไมคุณต้องการ csv เลย ทำไมไม่แก้ไขแอตทริบิวต์เพิ่มรูปหลายเหลี่ยมใหม่ ฯลฯ ใน GIS (คุณบอกว่าคุณมี QGIS) แล้วส่งออกสิ่งนั้นไปยัง KML สุดท้ายของคุณ
— 2856

@Rikk - เพื่อตอบคำถามในความคิดเห็นของคุณ: วิธีง่ายๆในการแยก Shapefile คือทำการเลือกเชิงพื้นที่ในส่วนของ Shapefile ของคุณแล้วคลิกขวาที่เลเยอร์แล้วเลือก "ส่งออก" จากนั้นคุณสามารถส่งออกคุณสมบัติที่เลือกไปยังรูปร่างใหม่ที่เล็กลง นี่ไม่ใช่วิทยาศาสตร์ แต่มันง่าย หรือคุณสามารถเลือกตามคุณสมบัติบางอย่างหากคุณต้องการแนวทางที่เป็นระเบียบมากขึ้น
— เรดาร์

คำตอบ:


28

นี่เป็นสคริปต์ง่าย ๆ ที่ใช้การโยงOGR python :

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()

แก้ไข: และสคริปต์อื่นที่จะแปลงจาก CSV ของคุณเป็น KML

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

คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับวิธีการใช้การเชื่อมโยงเหล่านั้นได้อย่างไรเมื่อทำการคัดลอกข้อมูลที่สำคัญที่ผู้อ่านต้องรู้
— Andrew S

8

ถ้าคุณแปลง shapefile ของคุณเป็น spatialite คุณควรจะทำสิ่งต่อไปนี้:

1) การทดลองกับ SQL เพื่อทดสอบผลลัพธ์:

อดีต

SELECT col1, col2, col3, AsKml (รูปเรขาคณิต _ คอลัมน์) จากแท็บ

2) เมื่อคุณพอใจกับผลลัพธ์แล้วคุณสามารถส่งออกเป็นรูปแบบ CSV:

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Spatialite:

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

ฟังก์ชัน SQL เชิงพื้นที่:

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


3

หากคุณกำลังทำงานกับ QGIS คุณสามารถสร้างเอกสาร CSV ได้ทันทีโดยคลิกขวาที่เลเยอร์ -> บันทึกเป็น -> CSV

หากคุณทำงานกับ ArcMap คุณสามารถส่งออก KML โดยใช้เครื่องมือเลเยอร์เป็น KML (ไปที่ตัวเลือกการค้นหาในโปรแกรม) ด้วยเหตุผลบางอย่างมันสร้าง KMZ แทน KML (อย่างน้อยนั่นคือสิ่งที่เกิดขึ้นในกรณีของฉัน)

ในการแปลง KMZ เป็น KML:

  • นำเข้าไฟล์ KMZ ของคุณไปยัง Google Earth และคลิกขวาที่เลเยอร์ของคุณและบันทึกเป็น KML
  • เปิด QGIS แล้วลากและวางไฟล์ KML - มันจะโหลดเลเยอร์โดยอัตโนมัติ (> QGIS 2.10 PISA)
  • คลิกขวาที่ไฟล์และบันทึกเป็น CSV

ขั้นตอนนี้จะใช้เวลานานขึ้นหากคุณทำงานกับ ArcGIS แต่ใน QGIS นั้นสามารถทำได้ในเวลาไม่นาน คุณจะต้องติดตั้ง QGIS ในทุกกรณี


ทดสอบวิธีแก้ปัญหาของคุณสำหรับ QGIS และไม่ทำงาน บันทึกเป็น csv ไม่รักษาองค์ประกอบเชิงพื้นที่
— Philipp Schwarz

QGIS ให้ทางเลือกแก่คุณในการเลือก WKT ในระหว่างการส่งออกซึ่งเป็นการส่งออกรูปทรงเรขาคณิต (องค์ประกอบเชิงพื้นที่) ในรูปแบบ WKT พร้อมกับคุณสมบัติที่เหลือในไฟล์รูปร่าง
— kozyr

จาก QGIS 3.0 คุณจะมองหา“เรขาคณิต” รายการแบบเลื่อนลงใต้“เลเยอร์ตัวเลือก” ในการเจรจาการส่งออกและเลือกAS_XY, AS_XYZหรือAS_WKT
— สิงห์

2

ที่บรรทัดคำสั่งคุณสามารถใช้ogr2ogrเช่นนี้

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

lcoสำหรับ“ ตัวเลือกการสร้างเลเยอร์” ฉันคิดว่า ตัวเลือกอื่น ๆ ที่มีอยู่มีการจัดทำเอกสารไว้ที่นี่: http://www.gdal.org/drv_csv.html


เลโอฉันได้รับ "ข้อผิดพลาด 1 ไม่สามารถดึงเลเยอร์ที่ร้องขอ 'GEOMETRY = AS_XYZ' ฉันสามารถนำไฟล์ขึ้นมาใน QGIS และเห็นเวกเตอร์ที่มีโครงร่างของประเทศชัดเจน
— Andrew S

-1

มีเครื่องมือใน 'แบบจำลองกระบวนการทางภูมิศาสตร์และคลังเครื่องมือสคริปต์' ที่ทำในสิ่งที่คุณกำลังมองหา มันสามารถส่งออกไปยัง excel หรือ csv

http://resources.arcgis.com/gallery/file/geoprocessing/details?entryID=95009B25-1422-2418-7FB5-B8638ECB2FA9


1
ฉันได้ดูแล้วว่ามันไม่ส่งออกรูปเรขาคณิตในรูปแบบใด ๆ KML นับประสา
— 2856

-1

เพียงไปที่เครื่องมือแปลงในแผนที่อาร์ค จากนั้นไปที่ตารางเพื่อ excel ไฟล์ excel จะทำ แปลง excel doc เป็นไฟล์. csv

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.