Как бороться с неподдерживаемыми типами fiona в python без использования arcpy?

Я работаю над проектом с данными ГИС из ArcGIS в файле .gdb. Я хотел использовать для этого fiona/geopandas и использовать данные с некоторыми библиотеками машинного обучения. Некоторые слои содержат неподдерживаемые типы, упомянутые здесь https://github.com/Toblerity/Fiona/blob/master/fiona/_geometry.pyx.

Более конкретно, я получил UnsupportedGeometryTypeError: 11 после открытия слоя и последующего его индексирования. Некоторые индексы имеют допустимые типы, другие — нет.

Пример:

with fiona.open('path.gdb', layer='layername') as layer:
  print(layer[4]) # works
  print(layer[5]) # don't work, UnsupportedGeometryTypeError: 11

В настоящее время я работаю на Mac, но могу переключиться на дистрибутив Linux, если он решит проблему. Я предпочитаю использовать бесплатные библиотеки и избегать arcpy, так как мне нужна лицензия и, например. АркГИС сервер.

Любые идеи, как я могу работать с этими форматами? Может дополнительные драйвера или другая библиотека? Спасибо.


person Anton Krashennikov    schedule 05.02.2019    source источник
comment
Знаете ли вы тип гео, который не поддерживается?   -  person sagarr    schedule 05.02.2019
comment
@sagarr до сих пор я сталкивался с MultiCurve, но возможно, что в наборе данных есть и другие типы.   -  person Anton Krashennikov    schedule 06.02.2019
comment
Боюсь, что shapely будет поддерживать собственный гео-тип, такой как multicurve, вам лучше использовать arcpy, также задайте вопрос на gis.stackexchange, там вы можете получить больше информации.   -  person sagarr    schedule 08.02.2019


Ответы (1)


Вы можете попробовать библиотеку Python GDAL/OGR. Есть хорошие шансы, что он поддерживает все типы геометрии, которые есть в вашем файле fgdb.

Если это не так, лучшим вариантом будет преобразование вашей базы данных FileGeodatabase (fgdb), которая является проприетарным форматом (Esri), в открытый формат, такой как PostGreSQL/PostGIS.

Вы можете использовать инструмент командной строки ogr2ogr для выполнения преобразования.

person Below the Radar    schedule 08.02.2019