谷歌地图上的单个瓦片WMS图层v3

问题描述:

我正在尝试使用谷歌地图api将WMS图层添加到谷歌地图上。我可以用下面的代码瓷砖WMS层成功地做到这一点:谷歌地图上的单个瓦片WMS图层v3

var tileSize = new google.maps.Size(256, 256); 

var options = { 
    'getTileUrl': googleGetTileUrlFunction, 
    'tileSize': tileSize, 
    'isPng': true 
}; 

var googleWMSLayer = new google.maps.ImageMapType(options); 

googleGetTileUrlFunction是一个函数,在参数接受坐标和缩放,并返回一个URL到WMS请求。

但是,我需要添加另一个图层到相同的地图,其中图层是单个图像,而不是图块。由于我无法在google maps api中找到单个图块WMS图层的对象,因此我试图设置一个平铺的地图,其中的图块具有视口的大小。我结束了这样的结果:

enter image description here

这显然还是瓷砖,这不是正确居中。有没有办法强制谷歌地图API从WMS请求中的指定位置绘制一个图块?

编辑:这是由谷歌地图与由WMS请求返回的图像呈现的WMS层的比较: enter image description here WMS的图像是完全与地图对齐,你可以看看东海岸清楚地看到它。我正在寻找一种方法来使用Google Maps API在视口上显示该图像。

Ground overlays解决了我的问题。据我所知,他们在地图上的指定坐标处显示图像。

不用创建google.maps.ImageMapType的,我创建了一个新的地面覆盖层:

var overlay = new google.maps.GroundOverlay(
    url, 
    imageBounds 
); 

overlay.setMap(gmap); 

url是我的WMS请求的URL和imageBounds是描述图像的每个边的坐标的对象。

每当我平移或放大地图时,通过生成一个新的请求url,其中边界框参数(BBOX)是地图的视口,我删除了前一个覆盖图并将其替换为新的覆盖图。

为了达到这个目的,我必须在处理地图平移事件的函数中存储覆盖层和生成我的WMS url的函数。

我仍然有一些小的投影问题需要解决,但这看起来像是一种有效的方法。

编辑:我实际上最终做出了一个自定义覆盖,以解决我的投影问题。这里有一个教程:https://developers.google.com/maps/documentation/javascript/customoverlays