GeoPandas to_file () koordinat sistemi olmadan GeoDataFrame'i kaydeder


13

Sahibim

  • GeoPandas 0.2.1 py27_0
  • fiona 1.7.0 np110py27_1
  • Python 2.7.10

Anaconda 2-4.1.1-Windows-x86 ortamında kurulu. GeoDataFrameGiriş veri setlerini okuyarak ve verileri çalıştırarak yapılandırabilirim , ancak bir çıkış veri kümesini kaydetmek koordinat sistemini korumaz.

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

Bu world_out.shp, kaynak şekil dosyasının özelliklerini ve şemasını içerir, ancak koordinat sistemi tanımsızdır ( <Unknown>). world_out.prjDosya 0 KB'tır ve hiçbir şey içermiyor.

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

Bu işlemi saf Fiona'yı kullanarak test ettim ve crsbilgileri koruyarak iyi çalışıyor :

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.prjDosya koordinat sistemi hakkında bilgi içermiyor.

Bu nedenle, GeoPandas yöntemi crsçağırırken veri çerçevesini çıktı veri kümesine okuyamıyor / yazamıyor gibi görünüyor to_file(). Ben çağrı denedi to_file()üzerinde GeoDataFramesçeşitli kaynaklardan ve veri setleri inşa ve koordinat sistemi bilgisi çıkış veri kümesi mevcut değildi.

Daha önce bu sorunla karşılaşan var mı? Herkes bunu test edebilir mi?

Yanıtlar:


11

Daha önce bu davranışla karşılaştım.

İyi bilinen metin (crs_wkt) dizesini to_file()yönteme açık bir şekilde iletmeniz gerekir . Daha sonra dize fiona.open().prj dosyasını yazacak şekilde iletilir.

Örnek kodunuzu kullanarak, şöyle bir şey yapın:

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)

üretmelidir: resim açıklamasını buraya girin

read_file()Ve to_file()işlevleri sadece sarıcı fonksiyonları olarak hizmet vermektedir. fiona.open()İmzası aşağıda gösterilen arama yapıyorlar :

resim açıklamasını buraya girin

Geopandas ile dosya okurken / yazarken açıkça bir crs_wkt değeri iletmeniz gerekir.


1
Bunu gönderdiğiniz için teşekkürler. Şaşırtıcı bir şekilde, sorunu artık tekrarlayamıyorum. Yukarıda gönderdiğim kodu çalıştırırken, .prjhakkında bilgi içeren dosyayı alıyorum crs. Yükselttiğim fionaiçin olabilir fiona 1.7.0 np110py27_2.
Alex Tereshenkov

Ne yazık ki yeni sürümlerde hala sorun var. 0.4.1 ve fiona 1.8.4 jeopandalarım var.
Vaiaro
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.