Чтение файла gpkg из памяти / zipfile

#python-3.x #shapefile #geopandas #fiona #geopackage

#python-3.x #шейп-файл #геопандас #фиона #геопакет

Вопрос:

Я знаю, что шейп-файл можно прочитать из zip-файла, извлекая его в памяти и затем считывая: https://gis.stackexchange.com/questions/250092/using-pyshp-to-read-a-file-like-object-from-a-zipped-archive

У Фионы также есть способы чтения шейп-файла из памяти:https://pypi.org/project/Fiona/1.5.0

Однако я не смог найти способ чтения в .gpkg (geopackage) таким же образом.

Как мне извлечь геопакет из zip-файла, а затем в geopandas geodataframe?

Комментарии:

1. вы что-нибудь пробовали? шаблон во втором ответе кажется многообещающим gis.stackexchange.com/a/365097/12552

2. @PaulH, я попробовал предложенный ответ мартинфлейса, но он не сработал (пробовал абсолютный и относительный путь), но я не уверен в синтаксисе, используемом в этом ответе. gis.stackexchange.com/a/365097/12552 показывает, как правильно извлечь zip-файл в память. Но мой вопрос заключается в том, как преобразовать извлеченный из памяти файл gpkg в фрейм геоданных gdf. До сих пор я видел, как это делается только с пакетом shapefile.

Ответ №1:

Вы можете прочитать его напрямую, указав путь к gpkg в zip.

     df = gpd.read_file('zip:///path/to/file.zip!data.gpkg')
  

для относительного пути:

     df = gpd.read_file('zip://../path/to/file.zip!data.gpkg')
  

(в случае необходимости возврата в каталог, а затем в ‘path/to /’ и т. Д

Комментарии:

1. что означает префикс ‘zip:’ в начале пути? Я никогда такого не видел. А также ‘!’ между .zip и .gpkg? Предполагаю, что указан файл в zip? Кроме того, я пробовал этот синтаксис, но безуспешно : (

2. Смотрите подробности синтаксиса zip-файла в документации fiona: fiona.readthedocs.io/en/latest/manual.html#virtual-filesystems

3. Спасибо! извините за редактирование ответа, я просто хотел, чтобы он был как можно более конкретным для других!