Как спроецировать плоское изображение на сферический меркатор EPGS:900013 для использования в слое изображений в открытых слоях

У меня плоское изображение размером 400x400 пикселей, представляющее площадь 400x400 километров. Мне нужно нарисовать это изображение как наложение в моей картографической системе OpenLayers. Я использую OpenStreetMap/Google Maps в качестве базовых слоев. Я хочу нарисовать оверлейное изображение, используя слой изображений, и я хочу центрировать мое оверлейное изображение в определенной точке широты / долготы. Проекция базового слоя - EPSG:900913, которая фактически является проекцией, используемой OpenStreetMap и Google Maps.

Что я понял (пожалуйста, поправьте меня, если я ошибаюсь), это то, что я не могу использовать плоское, "непроецированное" изображение в качестве слоя изображения, но мне нужно выполнить своего рода "перепроектирование", чтобы настроить изображение на быть совместимым с проекцией карты, которая EPSG:900913. Поиск здесь и в сети, кажется, я должен использовать библиотеку / инструмент под названием GDAL для этого, но, хотя я совершенно новичок в этом, я вас спрашиваю:

  • Кто-нибудь может обратиться ко мне о том, как его использовать?
  • Не могли бы вы сказать мне, верно ли то, что я только что сказал, и способ, описанный здесь, действителен?
  • Как я могу использовать gdal для преобразования моего плоского непроецированного изображения 400x400 пикселей в изображение, спроецированное в EPSG:900913, и пригодное для размещения в качестве слоя изображения в качестве наложения?

Благодарю.

Я добавил изображение по запросу.

Ответ, предоставленный @capdragon, был полезен и позволил мне сделать еще один шаг вперед. Во всяком случае, у меня все еще есть некоторые проблемы. Я сделал это:

  1. использовал gdal_translate для установки опорных точек на четыре угла и центр изображения следующим образом:

gdal_translate -of "GTIFF" -gcp 0 0 8.6923 45.5427 -gcp 400 0 13.8149 45.5427 -gcp 200 200 11.2536 43.771702 -gcp 0 400 8.8413 41.9460 -gcp 400 400 13.6659 41.9460 quadrprod.png quadrprod_gpc.tif

Таким образом, я получаю вывод quadrprod_gcp.tif. Затем.

  1. использовал gdalwarp, чтобы применить опорные точки, установленные в пункте выше, и установить правильную проекцию, которая выглядит следующим образом: EPSG:4326:

gdalwarp -t_srs EPSG:4326 quadrprod_gcp.tif quadrprod_gcp_warped.tif

Таким образом, я получаю окончательный quadrprod_gcp_warped.tif. Результирующее изображение не более 400х400 пикселей, но 458х331 пикселей. Тогда, если я использую gdalinfo, чтобы посмотреть на это, я нашел это:

gdalinfo quadrprod_gcp_warped.tif
Driver: GTiff/GeoTIFF
Files: quadrprod_gcp_warped.tif
Size is 458, 331
Coordinate System is:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.0174532925199433],
    AUTHORITY["EPSG","4326"]]
Origin = (8.768046497499189,45.547291862003739)
Pixel Size = (0.010877474938832,-0.010877474938832)
Metadata:
    AREA_OR_POINT=Area
Image Structure Metadata:
    INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (   8.7680465,  45.5472919) (  8d46'4.97"E, 45d32'50.25"N)
Lower Left  (   8.7680465,  41.9468477) (  8d46'4.97"E, 41d56'48.65"N)
Upper Right (  13.7499300,  45.5472919) ( 13d44'59.75"E, 45d32'50.25"N)
Lower Right (  13.7499300,  41.9468477) ( 13d44'59.75"E, 41d56'48.65"N)
Center      (  11.2589883,  43.7470698) ( 11d15'32.36"E, 43d44'49.45"N)
Band 1 Block=458x4 Type=Byte, ColorInterp=Red
    Mask Flags: PER_DATASET ALPHA
Band 2 Block=458x4 Type=Byte, ColorInterp=Green
    Mask Flags: PER_DATASET ALPHA
Band 3 Block=458x4 Type=Byte, ColorInterp=Blue
    Mask Flags: PER_DATASET ALPHA
Band 4 Block=458x4 Type=Byte, ColorInterp=Alpha

Как видите, 4 угла и центр широта / долгота отличаются от значений, которые я установил с помощью значений -gcp. Мои вопросы:

  • Почему значения широты / долготы, возвращаемые gdalinfo, отличаются от значений, которые я установил на шаге 1 с помощью -gpc?
  • Это нормально или я что-то не так делаю?
  • Какой следующий шаг? Должен ли я снова перевести изображение из EPSG:4326 в EPSG:900913?
  • Когда я размещаю свое изображение в качестве наложения в openlayers, когда я создаю объект bounds, я должен использовать в качестве юго-западного и северо-восточного углов, значения, которые я использовал в -gcp, или окончательные значения, которые я вижу с помощью gdalinfo?

1 ответ

То, что вы говорите, правильно.

Вы в основном хотите установить некоторые контрольные точки (контрольные точки), используя gdal_translate затем деформируйте изображение, используя gdalwarp,

Таким образом, для грубой проекции вы можете просто использовать угловые кординаты, чтобы установить 4 контрольные точки следующим образом. (Эти примеры используют EPSG:4326, но вы можете использовать EPSG:900913.

Установите 4 контрольные точки (угловые координаты)

gdal_translate -a_srs EPSG:4326 -gcp 0 0 -89.38939600 30.39282800 -gcp 1024 0 -87.00029400 30.01043900 -gcp 0 1250 -89.99424800 27.37030800 -gcp 1024 1250 -87.67748400 26.98606100 "originalImage.tif" "image_trans.tiff"

Выше сказано, что пиксель x=0 и y=0 равен "-89,38939600 30,39282800", пиксель x=1024 и y=0 равен -87,00029400 30,01043900 и так далее.

Деформация изображения:

gdalwarp -dstalpha -t_srs EPSG:4326 image_trans.tiff image_warped.tiff

Если деформация недостаточно хороша, вам нужно установить больше контрольных точек на изображении.

ОБНОВИТЬ

Я скачал ваше изображение и выполнил команды, которые у вас есть. У меня все работало нормально: |

    captDragon@liberatecuba:/media/Data/tmp/orthoTesting$ gdal_translate -of "GTIFF" -gcp 0 0 8.6923 45.5427 -gcp 400 0 13.8149 45.5427 -gcp 200 200 11.2536 43.771702 -gcp 0 400 8.8413 41.9460 -gcp 400 400 13.6659 41.9460 quadrprod.png quadrprod_gpc.tif
    Input file size is 400, 400
    0...10...20...30...40...50...60...70...80...90...100 - done.
captDragon@liberatecuba:/media/Data/tmp/orthoTesting$ gdalinfo quadrprod_gpc.tif 
    Driver: GTiff/GeoTIFF
    Files: quadrprod_gpc.tif
    Size is 400, 400
    Coordinate System is `'
    GCP Projection = 
    GCP[  0]: Id=1, Info=
              (0,0) -> (8.6923,45.5427,0)
    GCP[  1]: Id=2, Info=
              (400,0) -> (13.8149,45.5427,0)
    GCP[  2]: Id=3, Info=
              (200,200) -> (11.2536,43.771702,0)
    GCP[  3]: Id=4, Info=
              (0,400) -> (8.8413,41.946,0)
    GCP[  4]: Id=5, Info=
              (400,400) -> (13.6659,41.946,0)
    Image Structure Metadata:
      INTERLEAVE=PIXEL
    Corner Coordinates:
    Upper Left  (    0.0,    0.0)
    Lower Left  (    0.0,  400.0)
    Upper Right (  400.0,    0.0)
    Lower Right (  400.0,  400.0)
    Center      (  200.0,  200.0)
    Band 1 Block=400x5 Type=Byte, ColorInterp=Red
      Mask Flags: PER_DATASET ALPHA 
    Band 2 Block=400x5 Type=Byte, ColorInterp=Green
      Mask Flags: PER_DATASET ALPHA 
    Band 3 Block=400x5 Type=Byte, ColorInterp=Blue
      Mask Flags: PER_DATASET ALPHA 
    Band 4 Block=400x5 Type=Byte, ColorInterp=Alpha
Другие вопросы по тегам