如何从OpenStreetMap服务器导出图像?

1 投票
1 回答
4740 浏览
提问于 2025-04-16 02:00

大家早上好,

我来给大家解释一下我的情况:我有一个网站(用django-python做的),它使用Openlayers显示地图。地图有两个层:一个是背景层,显示城市名称和街道,我用的是openstreetmaps;第二个层包含一些地理信息,我使用MapServer(更具体地说,我把bbox参数和其他信息发送到我的服务器,然后通过mapscript为python生成地图)。

现在我想在我的网站上添加一个“导出”按钮,这个按钮需要创建一个.zip文件,里面包含地图的图片(还有一些图表和文件),所以我需要能够生成和在openlayers上显示的相同的地图,并把它保存到一个文件里,或者直接放进.zip里。

我最开始的想法是,我可以从openlayers获取坐标(BBOX),把这些坐标发送给python,然后通过网址调用两个服务器(mapserver和openmapstreets),把图片保存到.zip文件里……但生活可没那么简单,对吧?

对于mapserver层,这个方法是有效的,网址大概是这样的:

http://myserver/mapscript/?LAYERS=selection&FORMAT=png&BBOX=466501.93337405,6631240.3024181,750661.93337405,6853960.3024181&WIDTH=555&HEIGHT=435

但是当我尝试用相同的坐标调用openstreetmaps时,它却给我报错:

http://openstreetmapserver/?LAYERS=osm_l93&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A2154&BBOX=466501.93337405,6631240.3024181,750661.93337405,6853960.3024181&WIDTH=256&HEIGHT=256

An error occurred: can't find resolution index for 1110.000000. Available resolutions are: [4096.0, 2048.0, 1024.0, 512.0, 256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.5, 0.25]

所以现在……我不知道怎么调用OSM来生成我给的坐标的图片……我在openstreetmaps上找了一个导出的例子,我觉得他们可能使用了其他格式的坐标?

http://tile.openstreetmap.org/cgi-bin/export?bbox=-1.81,44.71,9.26,50.53&scale=3500000&format=png 

如果你有任何想法该怎么做,那就太好了!!!!

1 个回答

1

也许这个例子正是你需要的:OpenLayers 导出地图示例

撰写回答