GeoPandas to_file () menyimpan GeoDataFrame tanpa sistem koordinat

13

saya sudah

  • GeoPandas 0.2.1 py27_0
  • fiona 1.7.0 np110py27_1
  • Python 2.7.10

diinstal di lingkungan Anaconda 2-4.1.1-Windows-x86. Saya dapat membangun GeoDataFramedengan membaca dataset input dan mengoperasikan data namun menyimpan dataset output tidak mempertahankan sistem koordinat.

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

Itu world_out.shpmemang berisi fitur dan skema dari source shapefile, tetapi sistem koordinat tidak terdefinisi ( <Unknown>). The world_out.prjfile 0 KB dan tidak mengandung apa-apa.

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

Saya telah menguji untuk melakukan operasi ini menggunakan Fiona murni dan berfungsi dengan baik, menjaga crsinformasi:

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)

The CitiesFiona.prjberkas yang berisi informasi tentang sistem koordinat.

Jadi, sepertinya GeoPandas tidak dapat membaca / menulis crsbingkai data ke dalam dataset keluaran saat memanggil to_file()metode. Saya telah mencoba menelepon to_file()pada GeoDataFramesdibangun dari berbagai sumber dan dataset dan informasi sistem koordinat tidak pernah hadir dalam dataset output.

Adakah yang pernah mengalami masalah ini sebelumnya? Adakah yang bisa menguji ini?

Alex Tereshenkov
sumber

Jawaban:

11

Saya telah menemukan perilaku ini sebelumnya.

Anda harus secara eksplisit meneruskan string teks terkenal (crs_wkt) ke to_file()metode. String kemudian akan diteruskan ke fiona.open(), yang menulis file .prj.

Menggunakan kode sampel Anda, lakukan sesuatu seperti ini:

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)

harus menghasilkan: masukkan deskripsi gambar di sini

Fungsi read_file()dan to_file()hanya berfungsi sebagai fungsi pembungkus. Mereka memanggil fiona.open(), yang tanda tangannya ditunjukkan di bawah ini:

masukkan deskripsi gambar di sini

Anda perlu secara eksplisit memberikan nilai crs_wkt saat membaca / menulis file dengan geopanda.

Nxaunxau
sumber
1
Terima kasih telah memposting ini. Cukup mengejutkan, saya tidak dapat mereproduksi masalah ini lagi. Saat menjalankan kode yang saya posting di atas, saya mendapatkan .prjfile dengan info tentang crs. Bisa jadi karena saya telah ditingkatkan fionake fiona 1.7.0 np110py27_2.
Alex Tereshenkov
Sayangnya masih ada masalah di versi yang lebih baru. Saya memiliki geopanda 0.4.1 dan fiona 1.8.4.
Vaiaro