GeoPandas to_file () salva GeoDataFrame senza sistema di coordinate


13

io ho

  • GeoPandas 0.2.1 py27_0
  • fiona 1.7.0 np110py27_1
  • Python 2.7.10

installato in ambiente Anaconda 2-4.1.1-Windows-x86. Sono in grado di costruire GeoDataFrameleggendo set di dati di input e gestire i dati, ma il salvataggio di un set di dati di output non preserva il sistema di coordinate.

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

Il world_out.shpcontiene le caratteristiche e lo schema del shapefile sorgente, ma sistema di coordinate è definito ( <Unknown>). Il world_out.prjfile è 0 KB e non contiene nulla.

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

Ho testato per eseguire questa operazione usando Fiona puro e funziona benissimo, preservando le crsinformazioni:

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)

Il CitiesFiona.prjfile contiene le informazioni sul sistema di coordinate.

Quindi, sembra che GeoPandas non sia in grado di leggere / scrivere crsil frame di dati nel set di dati di output quando chiama il to_file()metodo. Ho provato chiamata to_file()sul GeoDataFramescostruito da varie fonti e set di dati e le informazioni di sistema di coordinate è mai presente nell'insieme di dati di uscita.

Qualcuno ha riscontrato questo problema prima? Qualcuno può provarlo?

Risposte:


11

Mi sono mai imbattuto in questo comportamento prima.

Devi passare esplicitamente la stringa di testo ben nota (crs_wkt) al to_file()metodo. La stringa verrà quindi passata a fiona.open(), che scrive il file .prj.

Usando il tuo codice di esempio, facendo qualcosa del genere:

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)

dovrebbe produrre: inserisci qui la descrizione dell'immagine

Le funzioni read_file()e to_file()servono semplicemente come funzioni wrapper. Chiamano fiona.open(), la cui firma è mostrata di seguito:

inserisci qui la descrizione dell'immagine

È necessario passare esplicitamente un valore crs_wkt durante la lettura / scrittura di file con geopandas.


1
Grazie per aver pubblicato questo Abbastanza sorprendentemente, non riesco più a riprodurre il problema. Quando eseguo il codice che ho pubblicato sopra, ottengo il .prjfile con le informazioni su crs. Potrebbe essere perché ho aggiornato fionaa fiona 1.7.0 np110py27_2.
Alex Tereshenkov,

Purtroppo c'è ancora il problema nelle versioni più recenti. Ho geopandas 0.4.1 e fiona 1.8.4.
Vaiaro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.