使用OpenLayers 3在Google地图上投影图像

时间:2016-06-26 23:35:11

标签: google-maps openlayers-3

我正在尝试使用OL3在Google地图上叠加卫星图像(6471x7669 jpg文件)。图像文件的元数据和投影信息提供为:

Driver: JP2ECW/ERDAS JPEG2000 (SDK 3.x)
Files: /mnt/NAIP/TN/2012/34084/m_3408403_ne_16_1_20120527_20120911.jp2
Size is 6471, 7669
Coordinate System is:
PROJCS["NAD83 / UTM zone 16N",
    GEOGCS["NAD83",
        DATUM["North_American_Datum_1983",
            SPHEROID["GRS 1980",6378137,298.2572221010002,
                AUTHORITY["EPSG","7019"]],
            AUTHORITY["EPSG","6269"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4269"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",-87],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AUTHORITY["EPSG","26916"]]
Origin = (710739.000000000000000,3875921.000000000000000)
Pixel Size = (1.000000000000000,-1.000000000000000)
Metadata:
  COLORSPACE=MULTIBAND
  COMPRESSION_RATE_TARGET=9
  VERSION=1
Corner Coordinates:
Upper Left  (  710739.000, 3875921.000) ( 84d41'26.44"W, 35d 0'14.31"N)
Lower Left  (  710739.000, 3868252.000) ( 84d41'33.42"W, 34d56' 5.56"N)
Upper Right (  717210.000, 3875921.000) ( 84d37'11.35"W, 35d 0' 9.39"N)
Lower Right (  717210.000, 3868252.000) ( 84d37'18.55"W, 34d56' 0.64"N)
Center      (  713974.500, 3872086.500) ( 84d39'22.44"W, 34d58' 7.49"N)
Band 1 Block=256x256 Type=Byte, ColorInterp=Undefined
  Description = Band #1
  Overviews: 3235x3834, 1617x1917, 808x958, 404x479, 202x239
Band 2 Block=256x256 Type=Byte, ColorInterp=Undefined
  Description = Band #2
  Overviews: 3235x3834, 1617x1917, 808x958, 404x479, 202x239
Band 3 Block=256x256 Type=Byte, ColorInterp=Undefined
  Description = Band #3
  Overviews: 3235x3834, 1617x1917, 808x958, 404x479, 202x239
Band 4 Block=256x256 Type=Byte, ColorInterp=Undefined
  Description = Band #4
  Overviews: 3235x3834, 1617x1917, 808x958, 404x479, 202x239

我遇到的问题是解释数据并找出要使用的投影(我不是地理学家)。我已经测试了EPSG:900913和EPSG:3857转换为EPSG:4326,但它似乎不起作用:

var lonlat = ol.proj.transform(evt.coordinate, 'EPSG:3857', 'EPSG:4326');

提供的数据提到EPSG:7019,EPSG:6269,EPSG:4269,EPSG:9001和EPSG:26916,其中没有一个似乎具有Proj4js定义。提供的角落&中心纬度/经度坐标非常准确。

我的问题是:这是否有现有的proj4.defs?如果没有,我该如何创建一个?非常感谢任何帮助。

更新
进一步扩展这个问题:最初我们将静态图像集中在谷歌地图上就好了。 enter image description here

但不确定将图层移动到一起时要使用哪种转换。简而言之,此代码中的转换<transform>应该是什么?

view.on('change:center', function() {
  var center = ol.proj.transform(view.getCenter(), <transform>, 'EPSG:4326');
  gmap.setCenter(new google.maps.LatLng(center[1], center[0]))
});

1 个答案:

答案 0 :(得分:1)

您的源图片位于NAD83 UTM 16N或EPSG:26916,请参阅http://spatialreference.org/ref/epsg/nad83-utm-zone-16n/

UTM是一个横向墨卡托投影,其垂直6度的世界条带投射到圆柱体上,其轴穿过磁极。 Google地图使用球形墨卡托(水平圆柱形)投影 - EPSG:3857。这两者的属性完全不同 - 如果不重新投影,您将无法在3857地图上准确地覆盖26916图像。

你看过这个http://openlayers.org/en/latest/examples/reprojection-image.html吗?

或者,您可以使用某种GIS程序将图像重新投影到3857,以便更容易使用3857地图进行合成 - 比如GlobalMapper。