2012-01-27 27 views
2

我创建了一个简单的网站,其中包含我要连接到wms服务器的地图。 现在的问题是,地图不显示,只是一个视图小图片。这里是我所创建的网站: http://dl.dropbox.com/u/2418858/index.htmlopenlayers - wms - 无法加载地图

这是我一直在使用的代码:

<script type="text/javascript"> 
     var map; 
     var wms; 
     var map_controls = [new OpenLayers.Control.LayerSwitcher(), 
          new OpenLayers.Control.PanZoomBar(), 
          new OpenLayers.Control.MouseToolbar(), 
          new OpenLayers.Control.KeyboardDefaults()]; 

     function init() { 
      map = new OpenLayers.Map("map", { 
       controls : map_controls 
      }); 
      wms = new OpenLayers.Layer.WMS("Satellitenbild_30m", "http://gis.lebensministerium.at/wmsgw/", { 
       layers : 'Satellitenbild_30m', 
       key : '6ae2a41178c77ccee1db7248c9f92b04', 
      }, { 
       projection : new OpenLayers.Projection('EPSG:32632'), 
       singleTile : true, 
       buffer : 0, 
       ratio : 1 
      }); 

      map.addLayer(wms); 

      map.zoomToMaxExtent(); 

     } 
    </script> 
</head> 
<body onload=init()> 
    <div id="map" style="width: 1000px; height: 1000px"></div> 
    </div> 
</body> 

当我使用空间司令(地理信息系统桌面程序),我看到地图并可以放大和缩小,但是当我使用Openlayers时,我看不到地图。

所以我所做的是用代理拦截请求vom Spatial Commander,看看这个请求与我的网站发送的请求有什么不同。

我发现的唯一区别是这SC看上去像这样的BBOX参数:

BBOX=495149.712089618,4954209.6147000715,1173065.9355847104,5633477.615310807 

,并从我的网页发送的请求参数是这样的:

BBOX=-351.5625,-351.5625,351.5625,351.5625 

所以我通过手动更改了通过我的网页发送的BBOX参数并得到: manual request所以有地图!

现在我实际的问题:

  • 为什么is'nt在地图上显示我的网站?
  • 为什么从Openlayers自动发送的BBOX参数远离空间指挥官发送的值?
  • 如何让我的地图工作?

谢谢!

+0

它不工作的唯一原因是因为BBOX未在您使用的投影中被请求。我不确定如何解决它。可能与在地图初始化中声明maxExtent有关。 – 2012-01-27 19:45:35

+0

非常感谢您的提示,因为现在我至少能够查看地图,尽管缩放级别已关闭,我无法弄清楚正确的maxExtent ... [link] http:// dl.dropbox.com/u/2418858/index1.html – user1173933 2012-01-28 14:30:37

回答

2

尝试设置财产maxResolutionmap对象:

map = new OpenLayers.Map("map", { 
    controls : map_controls, 
    maxResolution: 1000 
}); 
+0

谢谢!这个伎俩!地图现在显示的就像它的建议。我现在只需要弄清楚如何转换gps坐标...再次感谢您! – user1173933 2012-01-30 12:17:53

1

OpenLayers只处理一些投影(Web墨卡托和WGS84)本身。对于其他预测,您需要包含Proj4js库,网址为:http://proj4js.org/

如果OpenLayers可用(即添加到您的网页中),它将自动与此库集成。

接下来为投影添加投影参数(在代码中使用它之前)。在这种情况下EPSG:32632

您可以从http://spatialreference.org得到几乎所有的投影细节(当该网站是向上)在Proj4js格式:

Proj4js.defs["EPSG:32632"] = "+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"; 

http://spatialreference.org/ref/epsg/32632/proj4js/

然而望着your WMS service能力 - 也可以在Web墨卡托投影中请求 - 因此不需要重新投影:

最后,您发送的演示链接正在显示地图 - 至少在FireFox中。你确定你没有JavaScript错误吗?您在此行中有一个额外的逗号:

key : '6ae2a41178c77ccee1db7248c9f92b04', 

这经常会导致Internet Explorer停止显示地图。

+0

非常感谢!我现在已经包含了Proj4js,并且还制定了epsg:32632的定义,但是现在我已经看到,我的站点发送了EPSG31287.js的请求,我不知道它的定义,因为spatialreference.org已关闭。当他们再次起来时,我们会看一看...... – user1173933 2012-01-28 14:31:52

+0

所以我在我的网站中加入了Proj4j,但是可悲的是它并没有改变任何东西。同样的问题:地图显示,但方式太高的变焦因素,我不能改变它,因为然后地图不再显示... – user1173933 2012-01-29 18:47:43

+0

萤火虫没有显示任何脚本错误,但我已经修复了逗号。问题是,当我更改投影到其他任何东西时,地图不会显示... – user1173933 2012-01-30 10:55:09

0

的问题是,你没有设置投影上的OpenLayers地图对象。在这种情况下,OpenLayers设置“EPSG:4326”的默认投影。然后,您还可以设置maxExtent属性,以便OpenLayers知道应该向哪个区域发送图像请求。在初始化方法中,请执行以下操作:

map = new OpenLayers.Map("map", { 
    controls : map_controls, 
    projection: "EPSG:32632", 
    maxExtent: new OepnLayers.Bounds(495149.712089618,4954209.6147000715,1173065.9355847104,5633477.615310807)     
}); 
+0

谢谢!在我的情况下,问题是maxResolution没有设置。 – user1173933 2012-01-30 12:27:11