pyproj «crs не найден» (GDAL/Докер) — Python

#python #docker #gdal #coordinate-transformation #pyproj

#питон #докер #гдал #преобразование координат #пыпрой

Вопрос:

Я пытаюсь запустить контейнер Docker, который содержит несколько сценариев Python, которые должны выполняться последовательно, в том числе один, который преобразует координаты UTM в их эквивалент широты/долготы. Сценарий работает при запуске как автономный сценарий (например, в среде Spyder), но я получаю ошибки при выполнении того же сценария внутри моего контейнера docker. Вот сегмент сценария, который извлекает прогнозы для EPSG 3857 и EPSG 4326:

 import glob from osgeo import gdal, osr, ogr from pyproj import Proj, transform  for file in glob.glob("*.tif"):  dem = gdal.Open(file)  epsg_zone='EPSG:'  osr.SpatialReference(dem.GetProjection()).GetAttrValue("PROJCS|AUTHORITY", 1))  P3857 = Proj(init=epsg_zone)  P4326 = Proj(init='epsg:4326')  

Мой контейнер docker был создан путем установки GDAL v3.0.2 и pyproj v. 3.0.0.post1 среди других библиотек. Однако при запуске этого конкретного сценария я сталкиваюсь с ошибкой, когда обработка доходит до сегмента строки с надписью «P3857 = Proj(init=epsg_zone)».:

 File "pyproj/_crs.pyx", line 2302, in pyproj._crs._CRS.__init__ pyproj.exceptions.CRSError: Invalid projection:  init=epsg:None  type=crs: (Internal Proj  Error: proj_create: crs not found)  

Далее я определил еще один вопрос, касающийся того, как читается геотиф. Когда я запускаю инструкцию печати для «dem.GetProjection()» для запуска сценария в моем контейнере docker он возвращает пустую строку, в то время как он возвращает полную информацию о проекции и системе координат при запуске в качестве автономного инструмента. Он специально считывает объект dem (print(dem)) следующим образом:

 osgeo.gdal.Dataset; proxy of lt;Swig Object of type 'GDALDatasetShadow *' at 0x7f5e48651120gt;  

Я в замешательстве относительно того, почему скрипт работает нормально как автономный из среды Spyder, но я получаю эти ошибки из контейнера Docker. Любая помощь будет очень признательна!

Ответ №1:

Для выполнения своей работы GDAL полагается на каталог, полный файлов данных. Вполне вероятно, что либо этот каталог данных не был скопирован в контейнер, либо путь поиска GDAL внутри контейнера не соответствует месту установки.

Библиотека GDAL будет использовать переменную среды GDAL_DATA для поиска каталога данных. Во-первых, найдите данные (один из возможных файлов для поиска epsg.wkt ) в контейнере. Скопируйте его, если его нет. Затем установите GDAL_DATA где-нибудь в среде перед запуском вашего программного обеспечения