我正在尝试将WMS图层从远程ArcGIS服务器添加到我的GWT Web应用程序。我正在使用gwt-openlayers
库。
我的代码:
MapOptions defaultMapOptions = new MapOptions();
mapWidget = new MapWidget("100%", "100%", defaultMapOptions);
Map map = mapWidget.getMap();
//gNormal = new GoogleV3("Google Normal", gOptions);
//map.addLayer(gNormal);
WMSParams wmsParams = new WMSParams();
wmsParams.setFormat("image/png");
wmsParams.setLayers("1");
wmsParams.setStyles("");
WMSOptions wmsLayerParams = new WMSOptions();
wmsLayerParams.setUntiled();
wmsLayerParams.setProjection("EPSG:3857"); // is it correct setting for WMS layer?
// wmsLayerParams.setProjection("EPSG:102113");
// wmsLayerParams.setProjection("EPSG:4326");
wmsLayerParams.setTransitionEffect(TransitionEffect.RESIZE);
String wmsUrl = "sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer";
arcGis = new WMS("ArcGis", wmsUrl, wmsParams);
map.addLayer(arcGis);
map.setBaseLayer(arcGis);
LonLat lonLat = new LonLat(-84.1,36.4); //USA
lonLat.transform("EPSG:4326", map.getProjection());
//System.out.println("map projection "+map.getProjection());
map.setCenter(lonLat, 3);
add(mapWidget);
我读过很多文章和SO问题,但我仍然无法解决问题。我的问题是在地图上渲染粉红色的瓷砖而不是正常的图像。我复制了图片网址,提出了很多stackoverflow
个答案,并看到了以下内容:
http://localhost:8084/sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer?FORMAT=image%2Fpng&LAYERS=1&STYLES=&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG%3A4326&BBOX=-135,45,-90,90&WIDTH=256&HEIGHT=256
没有localhost:8084
前缀网址工作正常并向我展示一小块地图。
问题:
1)如何摆脱WMS url中的localhost前缀?在我的代码wmsUrl
中看起来像sampleserver1...
所以它是正确的。似乎我的应用程序将它的根路径添加到远程URL。
2)我读到WMS图层应该有以下投影 - "EPSG:3857"
。这是真的吗?正如我上面提到的,当我手动输入浏览器正确的URL而没有“localhost”前缀时,我看到了一些图像,但我不确定它是否正确。可能会移动图像。
3)我的最终目标是在地图中添加2个图层 - Google Map图层和WMS图层。 Google地图使用"EPSG:900913"
作为默认投影。有人可以给出在一个地图中放置谷歌层和WMS图层的常见技巧。可能有一些技巧,与预测有关的常见错误等等。
答案 0 :(得分:0)
在wmsUrl变量中,您缺少“http://”,这可能会有所帮助。 粉红色磁贴通常意味着找不到数据源,因此您应该在此处查找问题。尝试检查您在wms查看器中提供的wms URL(例如ArcGIS Explorer)。
问题: 1)尝试将http://添加到您的网址,而不使用localhost
2)WMS图层可以有任何投影,它仅取决于发布它的投影。有关特定WMS投影的信息应在元数据中找到。
3)如果两个图层具有相同的投影,则无需执行任何操作。如果要在一个贴图中的不同投影中使用两个图层,则必须重新投影其中一个图层。在纯OpenLayers中,这是通过为每个图层指定投影参数然后指定地图的displayProjection参数来完成的。图层将自动重新投影。但是,重投影需要一些时间,并且非常显着地增加了加载时间。如果可能的话,最好尽量避免重新投射。您可以重新投影其中一个图层的源数据并使用重新投影的数据。当然,这对于WMS是不可能的,因此您应该考虑使用不同的数据源。如果你想要一个背景地图,你可以下载OpenStreetMap数据,将它们重新投影到你想要的投影,然后将它们与你想要使用的其他WMS一起使用。
希望至少有一些有用: - )