【问题标题】:Single tile WMS layer on google maps api v3谷歌地图 api v3 上的单瓦 WMS 图层
【发布时间】:2016-05-31 18:05:14
【问题描述】:

我正在尝试使用 google maps api 将 WMS 图层添加到 google maps 地图。我能够使用以下代码使用平铺的 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 是一个函数,它接受坐标和缩放参数,并返回一个 url 到 WMS 请求。

但是,我需要在同一地图中添加另一个图层,其中该图层是单个图像,而不是图块。由于我在 google maps api 中找不到单个瓦片 WMS 图层的对象,因此我尝试设置瓦片具有视口大小的瓦片地图。我最终得到了这个结果:

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

编辑:以下是谷歌地图渲染的 WMS 图层与 WMS 请求返回的图像的比较: WMS图像与地图完美对齐,你可以看东海岸看清楚。我正在寻找一种使用谷歌地图 api 在视口上显示该图像的方法。

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 2012-01-11
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 2011-09-15
      • 2011-03-25
      • 1970-01-01
      • 2012-08-03
      • 2014-04-06
      相关资源
      最近更新 更多