我正在关注http://www.gisdoctor.com/v3/mapserver.html处的代码,以使用API v3将WMS作为图像叠加在Google地图上。上述链接的js代码如下
"WMSGetTileUrl" : function(tile, zoom) {
var projection = map.getProjection();
var zpow = Math.pow(2, zoom);
var ul = new google.maps.Point(
tile.x * 256.0 / zpow,
(tile.y + 1) * 256.0 / zpow
);
var lr = new google.maps.Point(
(tile.x + 1) * 256.0 / zpow,
tile.y * 256.0 / zpow
);
var ulw = projection.fromPointToLatLng(ul);
var lrw = projection.fromPointToLatLng(lr);
var bbox = ulw.lng() + "," + ulw.lat() + "," + lrw.lng() + "," + lrw.lat();
return url = "http://url/to/mapserver?" +
"version=1.1.1&" +
"request=GetMap&" +
"Styles=default&" +
"SRS=EPSG:4326&" +
"Layers=wmsLayers&" +
"BBOX=" + bbox + "&" +
"width=256&" +
"height=256&" +
"format=image/png&" +
"TRANSPARENT=TRUE";
},
"addWmsLayer" : function() {
/*
Creating the WMS layer options. This code creates the Google
imagemaptype options for each wms layer. In the options the function
that calls the individual wms layer is set
*/
var wmsOptions = {
alt: "MapServer Layers",
getTileUrl: WMSGetTileUrl,
isPng: false,
maxZoom: 17,
minZoom: 1,
name: "MapServer Layer",
tileSize: new google.maps.Size(256, 256)
};
/*
Creating the object to create the ImageMapType that will call the WMS
Layer Options.
*/
wmsMapType = new google.maps.ImageMapType(wmsOptions);
map.overlayMapTypes.insertAt(0, wmsMapType);
},
一切正常,但是,当然,WMS返回为256 x 256个图块。没有惊喜,因为这是我要求的。但是,在http://groups.google.com/group/google-maps-js-api-v3/browse_thread/thread/c22837333f9a1812/d410a2a453025b38的讨论之后,似乎我可能会更好地从mapserver请求一个未经处理的(单个)图像。这会减少我的服务器。在任何情况下,我都想尝试使用单个图像,但我无法正确构建一个图像。
具体来说,我将瓷砖的尺寸改为大的;例如,我尝试了1024 x 1024个瓷砖。我确实获得了更少的图块,但返回的图像与Google地图基础图层边界不匹配。
我想要的是根本不指定瓷砖尺寸。相反,我应该动态地计算出瓷砖尺寸,比如当前地图尺寸大256个像素。这样,无论地图大小如何,都会返回单个图像。此外,无缝平移将在地图边缘额外256px的帮助下实现。
建议?
答案 0 :(得分:0)
1)它对我有用 - 也有512和1024。您只需在所有适当的位置进行更改(角坐标计算,tileSize设置,WMS参数宽度和高度设置)。如果您只是在代码中的所有位置正确处理,则应该可以设置任何图块。
2)我认为你正试图在错误的地方进行优化。已建立256x256瓷砖是有原因的。请记住,谷歌正在缓存切片,因此对于较大的切片,整个解决方案可能会慢得多。此外,地图将为用户加载更快。
3)瓷砖概念是正确的,应予以保留。接收整个地图之类的东西是行不通的 - 想象一下地图平移。没有尝试重新发明轮子并坚持使用当前的谷歌瓷砖概念 - 它针对此类应用进行了优化。如果您需要将地图作为单个图像接收,则可以使用静态Google地图api 。
答案 1 :(得分:0)
见same question我刚才为别人回答。这很可能是你的预测。 EPSG:4326不是Google地图的正确预测。更改投影意味着您需要更改计算和引用坐标的方式。