GeoPandas to_file () บันทึก GeoDataFrame โดยไม่ต้องมีระบบพิกัด


13

ฉันมี

  • GeoPandas 0.2.1 py27_0
  • ฟิโอน่า 1.7.0 np110py27_1
  • Python 2.7.10

ติดตั้งในสภาพแวดล้อม Anaconda 2-4.1.1-Windows-x86 ฉันสามารถสร้างได้GeoDataFrameโดยการอ่านชุดข้อมูลอินพุตและใช้งานข้อมูล แต่การบันทึกชุดข้อมูลเอาต์พุตไม่รักษาระบบพิกัดไว้

import geopandas as gpd
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world.to_file(driver='ESRI Shapefile',filename=r'C:\GIS\Temp\world_out.shp')

สิ่งworld_out.shpนี้มีคุณลักษณะและสกีมาของซอร์สไฟล์รูปร่าง แต่ระบบพิกัดไม่ได้ถูกกำหนด ( <Unknown>) world_out.prjไฟล์ 0 KB และไม่ได้มีอะไร

out = gpd.read_file(r'C:\GIS\Temp\world_out.shp')
print out.crs
>>> {}

ฉันทดสอบเพื่อใช้งานโดยใช้ฟิโอน่าบริสุทธิ์และใช้งานได้ดีโดยรักษาcrsข้อมูลไว้:

import fiona

datasrc_path = r'C:\Program Files (x86)\ArcGIS\Desktop10.4\TemplateData\TemplateData.gdb'

with fiona.drivers():
    with fiona.open(datasrc_path,layer='cities') as source:
        meta = source.meta
        meta['driver'] = 'ESRI Shapefile'
        meta['layer'] = source.name

        with fiona.open(r'C:\GIS\CitiesFiona.shp', 'w', **meta) as sink:
            for f in source:
                sink.write(f)

CitiesFiona.prjไฟล์จะมีข้อมูลเกี่ยวกับระบบพิกัด

ดังนั้นดูเหมือนว่า GeoPandas จะไม่สามารถอ่าน / เขียนcrsเฟรมข้อมูลลงในชุดข้อมูลเอาต์พุตเมื่อเรียกใช้to_file()เมธอด ฉันได้พยายามโทรto_file()ในGeoDataFramesสร้างขึ้นมาจากแหล่งต่าง ๆ และชุดข้อมูลและข้อมูลระบบพิกัดก็ไม่เคยอยู่ในชุดข้อมูลที่เอาท์พุท

มีใครประสบปัญหานี้มาก่อนหรือไม่ ทุกคนสามารถทดสอบได้ไหม

คำตอบ:


11

ฉันเคยเจอพฤติกรรมนี้มาก่อน

คุณต้องผ่านสตริงข้อความ (crs_wkt) ที่รู้จักกันดีไปยังto_file()เมธอด สตริงจะถูกส่งผ่านไปยังfiona.open()ซึ่งจะเขียนไฟล์. prj

ใช้โค้ดตัวอย่างของคุณทำสิ่งนี้:

ws = r"D:\temp_se"
prj_file = gpd.datasets.get_path('naturalearth_lowres').replace(".shp",".prj")
prj = [l.strip() for l in open(prj_file,'r')][0]
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
temp_shp = os.path.join(ws,"world_out.shp")
world.to_file(filename=temp_shp,driver='ESRI Shapefile',crs_wkt=prj)

ควรผลิต: ป้อนคำอธิบายรูปภาพที่นี่

read_file()และto_file()ฟังก์ชั่นก็ทำหน้าที่เป็นฟังก์ชั่นเสื้อคลุม พวกเขาเรียกfiona.open()ซึ่งมีลายเซ็นที่แสดงด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

คุณต้องผ่านค่า crs_wkt อย่างชัดเจนเมื่ออ่าน / เขียนไฟล์ด้วย geopandas


1
ขอขอบคุณที่โพสต์สิ่งนี้ น่าแปลกที่ฉันไม่สามารถทำให้เกิดปัญหาได้อีกต่อไป เมื่อใช้รหัสผมโพสต์ข้างต้นผมทำจะได้รับไฟล์ที่มีข้อมูลเกี่ยวกับ.prj crsมันอาจจะเป็นเพราะผมได้อัปเกรดไปfiona fiona 1.7.0 np110py27_2
Alex Tereshenkov

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