Как спроецировать плоское изображение на сферический меркатор EPGS:900013 для использования в слое изображений в открытых слоях
У меня плоское изображение размером 400x400 пикселей, представляющее площадь 400x400 километров. Мне нужно нарисовать это изображение как наложение в моей картографической системе OpenLayers. Я использую OpenStreetMap/Google Maps в качестве базовых слоев. Я хочу нарисовать оверлейное изображение, используя слой изображений, и я хочу центрировать мое оверлейное изображение в определенной точке широты / долготы. Проекция базового слоя - EPSG:900913, которая фактически является проекцией, используемой OpenStreetMap и Google Maps.
Что я понял (пожалуйста, поправьте меня, если я ошибаюсь), это то, что я не могу использовать плоское, "непроецированное" изображение в качестве слоя изображения, но мне нужно выполнить своего рода "перепроектирование", чтобы настроить изображение на быть совместимым с проекцией карты, которая EPSG:900913. Поиск здесь и в сети, кажется, я должен использовать библиотеку / инструмент под названием GDAL для этого, но, хотя я совершенно новичок в этом, я вас спрашиваю:
- Кто-нибудь может обратиться ко мне о том, как его использовать?
- Не могли бы вы сказать мне, верно ли то, что я только что сказал, и способ, описанный здесь, действителен?
- Как я могу использовать gdal для преобразования моего плоского непроецированного изображения 400x400 пикселей в изображение, спроецированное в EPSG:900913, и пригодное для размещения в качестве слоя изображения в качестве наложения?
Благодарю.
Я добавил изображение по запросу.
Ответ, предоставленный @capdragon, был полезен и позволил мне сделать еще один шаг вперед. Во всяком случае, у меня все еще есть некоторые проблемы. Я сделал это:
- использовал 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. Затем.
- использовал 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