我有一个 400x400 像素的平面图像,代表 400x400 公里的区域。我需要将此图像绘制为我的 OpenLayers 映射系统上的叠加层。我使用 OpenStreetMap/Google Maps 作为基础层。我想使用图像层绘制覆盖图像,并且我想将覆盖图像居中在特定的纬度/经度点。基础层的投影是 EPSG:900913,实际上是 OpenStreetMap 和 Google Maps 使用的投影。
我所理解的(如果我错了,请纠正我)是我不能使用平面的“未投影”图像作为图像层,但我必须做一种“重新投影”来调整图像符合地图的投影,即EPSG:900913。在这里和网上搜索,似乎我应该使用一个名为 GDAL 的库/工具来执行此操作,但是虽然我对此完全陌生,但我问你:
- 谁能告诉我如何使用它?
- 你能告诉我我刚才所说的是否正确,我在这里描述的方式是否有效?
- 如何使用 gdal 将我的平面未投影 400x400 像素图像转换为投影在 EPSG:900913 中的图像,并适合作为图像层作为叠加层放置?
谢谢。
我按要求添加了图像。
@capdragon 提供的答案很有用,让我更进一步。无论如何,我还有一些问题。我这样做了:
- 使用 gdal_translate 将 GCP 设置为图像的四个角和中心,如下所示:
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 应用上述点中设置的 GCP 并设置正确的投影,即 EPSG:4326,如下所示:
gdalwarp -t_srs EPSG:4326 quadrprod_gcp.tif quadrprod_gcp_warped.tif
这样我得到了一个最终的 quadrprod_gcp_warped.tif。生成的图像不再是 400x400 像素,而是 458x331 像素。然后,如果我使用 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 中时,当我创建边界对象时,我应该将其用作西南角和东北角,我在 -gcp 中使用的值还是我在 gdalinfo 中看到的最终值?