1

我正在尝试将 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前缀 url 可以正常工作,并向我显示一小块地图。

问题:

1) 如何摆脱 WMS url 中的 localhost 前缀?在我的代码中wmsUrl看起来sampleserver1...是正确的。看来我的应用程序将它的根路径添加到远程 url。

2)我读到 WMS 层应该有以下投影 - "EPSG:3857". 这是真的吗?正如我上面提到的,当我在浏览器中手动输入没有“localhost”前缀的正确 url 时,我看到了一些图像,但我不确定它是否正确。可能图像被移动了。

3)我的最终目标是在地图上添加 2 个图层 - 谷歌地图图层和 WMS 图层。谷歌地图"EPSG:900913"用作默认投影。有人可以给出将谷歌图层和 WMS 图层放在一张地图中的常见提示吗?可能有一些技巧,与预测相关的常见错误等等。

4

1 回答 1

0

在 wmsUrl 变量中,您缺少“http://”,这可能会有所帮助。粉红色的瓷砖通常表示未找到数据源,因此您应该在此处查找问题。尝试检查您在 wms 查看器(例如ArcGIS Explorer)中提供的 wms URL 。

对于您的问题:1)尝试将 http:// 添加到您的 url,而不使用 localhost

2)WMS 图层可以有任何投影,它仅取决于发布它的投影。有关特定 WMS 投影的信息应在元数据中找到。

3)如果两层投影相同,则无需执行任何操作。如果要在一张地图中使用不同投影的两个图层,则必须重新投影其中一个图层。在纯 OpenLayers 中,这是通过为每个图层指定投影参数,然后为地图指定 displayProjection 参数来完成的。图层将自动重新投影。但是,重新投影需要一些时间,并且会显着增加加载时间。如果可能,最好避免即时重投影。您可以重新投影其中一个图层的源数据并使用重新投影的数据。当然,这对于 WMS 是不可能的,因此您应该考虑使用不同的数据源。如果您想要背景地图,您可以下载 OpenStreetMap 数据,将它们重新投影到您想要的投影,

希望至少其中一些有所帮助:-)

于 2013-09-02T21:14:21.610 回答