google 地图 api v3 上的单个瓦片 WMS 图层

Single tile WMS layer on google maps api v3

我正在尝试使用 google 地图 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 是一个接受坐标和缩放参数的函数,returns 一个 url 到 WMS 请求。

但是,我需要向同一张地图添加另一个图层,该图层是单个图像,而不是图块。由于我无法在 google 地图 api 中找到单图块 WMS 图层的对象,我尝试设置一个图块地图,其中图块的大小与视口相同。我最终得到了这个结果:

它显然还是平铺的,而且没有正确居中。有没有办法强制 google 地图 API 根据 WMS 请求在指定位置绘制单个图块?

编辑:这是 google 地图渲染的 WMS 层与 WMS 请求返回的图像的比较: WMS 图像与地图完美对齐,你可以在东海岸看清楚。我正在寻找一种使用 google 地图 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