#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 где-нибудь в среде перед запуском вашего программного обеспечения