我正在尝试将WMS层从远程ArcGIS服务器添加到我的GWT应用程序中。我正在使用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);我读了很多文章,所以提出了一些问题,但我仍然不能解决这个问题。我的问题是在地图上绘制粉红色的瓷砖,而不是正常的图像。我复制了许多stackoverflow答案的图片url,并看到了以下内容:
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前缀,url可以很好地显示给我看一小张地图。
问题:
1)如何摆脱WMS url中的本地主机前缀?在我的代码中,wmsUrl看起来像sampleserver1...,所以它是正确的。我的应用程序似乎添加了远程url的根路径。
2)我读到WMS层应该有以下投影-- "EPSG:3857"。是真的吗?正如我前面提到的,当我手动输入没有"localhost“前缀的浏览器更正url时,我看到了一些图像,但我不确定它是否正确。可能是图像被移动了。
3)我的最终目标是在地图上增加2层-- Google层和WMS层。Google使用"EPSG:900913"作为默认投影。谁能给出共同的提示,把谷歌层和WMS层放在一张地图上。可能有一些技巧,常见的错误与预测有关等等。
发布于 2013-09-02 21:14:21
在wmsUrl变量中,您忽略了"http://",这可能有帮助。粉红瓷砖通常意味着没有找到数据源,因此您应该在这里查找问题。尝试检查您在wms查看器中提供的wmsUrl(例如ArcGIS资源管理器 )。“
对于您的问题:1)尝试将http://添加到您的url中,而不使用localhost
2) WMS层可以有任何投影,这完全取决于所发布的投影。有关特定WMS投影的信息应在元数据中找到。
3)如果这两层有相同的投影,你不需要做任何事情。如果要在一张地图中使用不同投影中的两个层,则必须重新投影其中一个层。在纯OpenLayers中,这是通过为每个层指定投影参数,然后为映射指定displayProjection参数来完成的。图层将自动重新投影。然而,重新投影需要一些时间,并且它大大增加了负载时间。如果可能的话,最好避免在飞行中重新投影.您可以重新投影其中一个层的源数据并使用重新投影的数据。当然,这对于WMS来说是不可能的,所以您应该考虑使用不同的数据源。如果您想要一个背景地图,您可以不加载OpenStreetMap数据,将它们重新投影到所需的投影中,然后将它们与您想要使用的其他WMS一起使用。
希望至少有一些帮助:)
https://stackoverflow.com/questions/18556770
复制相似问题