GeoPandas to_file()は座標系なしでGeoDataFrameを保存します


13

私は持っています

  • GeoPandas 0.2.1 py27_0
  • fiona 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キロバイトで、何が含まれていません。

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ファイルには、座標系についての情報を含んでいます。

したがって、メソッドをcrs呼び出すときに、GeoPandasがデータフレームを出力データセットに読み書きできないよう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()、その署名を以下に示します。

ここに画像の説明を入力してください

geopandasでファイルを読み書きするときは、crs_wkt値を明示的に渡す必要があります。


1
これを投稿してくれてありがとう。驚いたことに、この問題はもう再現できません。上記で投稿したコードを実行する.prjと、に関する情報を含むファイルを取得しますcrs。にアップグレードfionaしたことが原因である可能性がありますfiona 1.7.0 np110py27_2
Alex Tereshenkov 2016年

残念ながら、新しいバージョンにはまだ問題があります。私はgeopandas 0.4.1とfiona 1.8.4を持っています。
Vaiaro、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.