【发布时间】:2016-06-26 23:35:11
【问题描述】:
我正在尝试使用 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 呢?如果没有,我该如何创建一个?非常感谢您对此提供任何帮助。
更新
进一步扩展这个问题:最初我们将静态图像集中在谷歌地图上就好了。
但不确定当图层一起移动时要使用什么转换。简而言之,这段代码中<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]))
});
【问题讨论】:
-
这是一个相当大的图像。与其直接尝试将其覆盖在地图上,我建议您首先使用地图服务器来提供它,例如使用 MapServer 或 GeoServer。这样,您将能够使用 WMS 协议根据缩放级别呈现最佳图像。 OpenLayers 支持 WMS。您可能也有兴趣寻找 OL3-Google-Maps:mapgears.github.io/ol3-google-maps
-
感谢@Alexandre Dubé 的评论。图像渲染实际上不是问题或问题,因为这些实际上是 .jp2 文件(甚至更大的卫星图像)。我们使用 IIP 图像服务器来有效地渲染这些。我确实查看了 ol3-google-maps。目前看来,它的范围有限,并且没有关于如何处理 ol.source.ImageStatic 的示例。该问题仍然是 OL3 转换问题。我们在 Google 地图上成功地将图像居中(84d39'22.44"W,34d58'7.49"N),但是当您移动图层时,它们会关闭。
-
您可以在 ol3-google-maps 的 GitHub 上创建一个关于支持静态图像源的问题。一名学生目前正在参加该项目的 Google Summer of Code。如果他有时间,他可以做这件事。或者,您也可以通过提供 Pull Request 自己贡献。