我正在尝试使用google maps api将WMS图层添加到Google地图地图。我能够使用以下代码成功地使用平铺的WMS图层:
var tileSize = new google.maps.Size(256, 256);
var options = {
'getTileUrl': googleGetTileUrlFunction,
'tileSize': tileSize,
'isPng': true
};
var googleWMSLayer = new google.maps.ImageMapType(options);
其中googleGetTileUrlFunction
是一个函数,它接受坐标和缩放参数并将网址返回给WMS请求。
但是,我需要在同一个地图中添加另一个图层,其中图层是单个图像,而不是图块。由于我在google maps api中找不到单瓦WMS图层的对象,因此我尝试设置一个平铺地图,其中图块的大小与视口大小相同。我最终得到了这个结果:
它显然仍然是平铺的,并且它没有正确居中。有没有办法强制谷歌地图API从WMS请求在指定位置绘制单个图块?
编辑:以下是谷歌地图呈现的WMS图层与WMS请求返回的图像的比较: WMS图像与地图完美对齐,您可以查看东海岸以清楚地看到它。我正在寻找一种使用google maps api在视口上显示该图像的方法。
答案 0 :(得分:0)
Ground overlays解决了我的问题。据我所知,它们在地图上的指定坐标处显示图像。
我没有创建google.maps.ImageMapType
,而是创建了一个新的地面叠加层:
var overlay = new google.maps.GroundOverlay(
url,
imageBounds
);
overlay.setMap(gmap);
url
是我的WMS请求的网址,imageBounds
是描述图像每一侧坐标的对象。
每次平移或放大地图时,我都会删除之前的叠加层并将其替换为新的叠加层,方法是生成一个新的请求网址,其中边界框参数(BBOX
)是地图&#39 ; s viewport。
为了实现这一点,我必须保存叠加层和生成我的WMS URL的函数,该函数可以在处理地图平移事件的函数中访问。
我仍然需要修复一些小的投影问题,但这看起来是一种有效的方法。
编辑:我实际上最终制作了一个自定义叠加来修复我的投影问题。这里有一个教程:https://developers.google.com/maps/documentation/javascript/customoverlays