GeoPandas to_file () зберігає GeoDataFrame без системи координат


13

Я маю

  • GeoPandas 0.2.1 py27_0
  • fiona 1.7.0 np110py27_1
  • Пітон 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
>>> {}

Я перевірив цю операцію за допомогою чистої Fiona, і вона прекрасно працює, зберігаючи 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 під час читання / запису файлів з геопандами.


1
Дякуємо, що опублікували це. Як не дивно, я більше не можу відтворити проблему. Під час запуску коду, який я розмістив вище, я отримую .prjфайл з інформацією про crs. Це може бути тому , що я підвищено fionaдо fiona 1.7.0 np110py27_2.
Олексій Терешенков

На жаль, проблема залишається в нових версіях. У мене є геопанди 0.4.1 та фіона 1.8.4.
Ваяро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.