Image 如何将平面图像投影到球形墨卡托EPGS:900013,以便在openlayers的图像层中使用

Image 如何将平面图像投影到球形墨卡托EPGS:900013,以便在openlayers的图像层中使用,image,openlayers,gdal,map-projections,Image,Openlayers,Gdal,Map Projections,我有一张400x400像素的平面图像,它代表了400x400公里的面积。我需要在我的OpenLayers映射系统上绘制此图像作为覆盖。我使用OpenStreetMap/Google地图作为基本层。我想使用图像层绘制覆盖图像,并将覆盖图像居中于特定的纬度/经度点。基本层的投影是EPSG:900913,这实际上是OpenStreetMap和Google Maps使用的投影 我所理解的是(如果我错了,请纠正我),我不能使用平面、“未投影”图像作为图像层,但我必须进行某种“重投影”,以调整图像以符合地图

我有一张400x400像素的平面图像,它代表了400x400公里的面积。我需要在我的OpenLayers映射系统上绘制此图像作为覆盖。我使用OpenStreetMap/Google地图作为基本层。我想使用图像层绘制覆盖图像,并将覆盖图像居中于特定的纬度/经度点。基本层的投影是EPSG:900913,这实际上是OpenStreetMap和Google Maps使用的投影

我所理解的是(如果我错了,请纠正我),我不能使用平面、“未投影”图像作为图像层,但我必须进行某种“重投影”,以调整图像以符合地图的投影,即EPSG:900913。在这里和网上搜索,似乎我应该使用一个名为GDAL的库/工具来完成这项工作,但鉴于我对这项工作完全陌生,我想问你:

  • 有人能告诉我如何使用它吗
  • 你能告诉我我刚才说的是否正确,我在这里描述的方式是否有效吗
  • 如何使用gdal将未投影的400x400像素平面图像转换为EPSG:900913中投影的图像,并适合作为图像层作为覆盖
谢谢

我按要求添加了图像

@capdragon提供的答案很有用,让我更进一步。无论如何,我还有一些问题。我这样做:

  • 使用gdal_translate将GCP设置为图像的四个角和中心,如下所示:
  • gdal_翻译-GTIFF-gcp 0 8.6923 45.5427-gcp 400 0 13.8149 45.5427-gcp 200 11.2536 43.771702-gcp 0 400 8.8413 41.9460-gcp 400 13.6659 41.9460 quadrprod.png quadrprod_gpc.tif

    这样我就得到了quadrprod_gcp.tif输出。那么

  • 使用gdalwarp应用上面点中的GCP集,并设置右侧投影,即EPSG:4326,如下所示:
  • gdalwarp-t\u srs EPSG:4326 quadrprod\u gcp.tif quadrprod\u gcp\u 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个角和中心lat/lon与我使用-gcp值设置的值不同。我的问题是:

    • 为什么gdalinfo返回的lat/lon值与我在步骤1中使用-gpc设置的值不同
    • 这是正常的还是我做错了什么
    • 下一步是什么?我应该再次将图像从EPSG:4326翻译为EPSG:900913吗
    • 当我在openlayers中将图像作为覆盖放置时,当我创建bounds对象时,我应该使用-gcp中使用的值作为西南角和东北角,还是使用gdalinfo看到的最终值

      • 你说的是对的

        基本上,您需要使用
        gdal\u translate
        设置一些控制点(参考点),然后使用
        gdalwarp
        扭曲图像

        因此,对于粗略投影,您可以简单地使用角坐标设置4个控制点,如下所示。(这些示例使用的是EPSG:4326,但您可以使用EPSG:900913

        设置4个控制点(角坐标) 如上所述,像素x=0和y=0等于“-89.38939600 30.39282800”,像素x=1024和y=0等于-87.00029400 30.01043900,以此类推

        扭曲图像: 如果扭曲不够好,则需要在图像上设置更多控制点

        更新 我下载了你的图像并运行了你的命令。一切都很好: |


        为了重新投影图像,您至少应该知道图像的投影。如果它与目标相同,则不必使用GDAL,并且可以直接计算角坐标以用于
        OpenLayers.Layer.image
        。如果运行
        gdalinfo
        ,您是否可以在此处下载图像?@capdragon:我编辑了我的答案并添加了图像。@Magallo我看到的是一个有4个彩色方块的图像。不确定这是否是默认的SE图像,当它无法显示上传的图像时会显示。嗨!你的答案很好,让我再进一步。无论如何,我仍然有一些问题。请回头看我的问题。我修改了它并添加了更多信息。当输入值预计不在投影网格边界内时,我得到了类似于
        8d46'4.97“E
        的值。我注意到您错过了
        gdal\u translate
        命令中的
        -a\u srs EPSG:4326
        部分。这应该可以解决问题,因为它将指定图像使用的投影。
        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"
        
        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