google maps api v3

时间:2016-05-31 18:05:15

标签: javascript google-maps google-maps-api-3 wms

我正在尝试使用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图层的对象,因此我尝试设置一个平铺地图,其中图块的大小与视口大小相同。我最终得到了这个结果:

enter image description here

它显然仍然是平铺的,并且它没有正确居中。有没有办法强制谷歌地图API从WMS请求在指定位置绘制单个图块?

编辑:以下是谷歌地图呈现的WMS图层与WMS请求返回的图像的比较: enter image description here WMS图像与地图完美对齐,您可以查看东海岸以清楚地看到它。我正在寻找一种使用google maps api在视口上显示该图像的方法。

1 个答案:

答案 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