是否可以使用不同投影的另一个WMS图层显示OSM数据?

时间:2012-08-24 10:29:06

标签: javascript openlayers openstreetmap mapserver

我有一个问题,我在EPSG中存储了大量数据:27700(OSGB)需要映射。我已经开发了一个映射器来使用OpenLayers和基础层,OpenSpace来自英国条例调查(http://www.ordnancesurvey.co.uk/oswebsite/web-services/os-openspace/api/index。 HTML)。然而,这个基础层被投射到27700,所以直到这一点我还没有问题,因为所有的投影(来自mapserver和基础层)是相同的。

现在要求进一步放大图层,而不是免费条例调查所允许的(即使质量下降)。我发现可以使用OpenLayers进一步缩放到基于区块的层,例如OSM。我遇到的问题是试图让OpenLayers在投影EPSG:27700中显示OSM数据和我的图层。

这甚至可能吗?

感谢。

2 个答案:

答案 0 :(得分:3)

OpenLayers无法重新投影图像图层。这样做的原因是OpenLayers使用CSS来覆盖您的图像层,并且CSS不够丰富,无法实现空间转换所需的复杂几何操作。

作为解决方案,您需要将数据从EPSG:27700重新投影到WMS服务器中的基础层投影(如果使用OpenStreetMap,则为EPSG:900913)。您可以使用MapServer或GeoServer即时执行此操作。

另一种解决方案是将WFS用于叠加层:然后OpenLayers可以重新投影叠加层中每个矢量要素的位置。看看WFS reproejction example

最后,有一个使用HTML5 Canvas和JavaScript版本的GDAL进行栅格转换的实验解决方案:

http://dev.openlayers.org/sandbox/camptocamp/canvas/openlayers/examples/raster-reprojection.html

答案 1 :(得分:0)

OSM数据通常作为瓷砖在EPSG:900913中提供,因此不可能将瓷砖转换为其他投影(您可以尝试但质量会随着尖齿的小分辨率而下降)。您可以做的是下载所有OSM数据并在您喜欢的EPSG中运行您自己的tileservice。

但首先,请查看openLayers文档中地图对象的所有特性。您可以设置地图的缩放级别。如果不这样做,默认情况下,地图对象会从第一个加载的图层中获取缩放级别,这可能是您的问题,因为英国操作系统图层可能只有很少的缩放级别。