7

我想在 Python 中创建一个包含几个给定点的地图。为此,我想使用matplotlib 中的Basemap。它运作良好,但我不知道如何获得合适的背景图。

如何导入OSM地图?或者我应该使用不同的映射包?我只想创建一个光栅图并将其保存为 png。

4

2 回答 2

3

这不是我的解决方案;我从问题中粘贴了它,因为提问者没有足够的声誉来回答他自己的问题。

我找到了一个解决方案:

在 Basemap 中使用imshow会将 png 作为背景图像添加到绘图中。为了获得正确的背景图像,我使用了 OSM 的导出功能,边界取自 Basemap 构造函数:

m = Basemap(llcrnrlon=7.4319, urcrnrlat=52.0632, urcrnrlon=7.848, llcrnrlat=51.8495,
        resolution='h', projection='merc')

im = plt.imread('background.png')
m.imshow(im, interpolation='lanczos', origin='upper')
于 2012-07-15T08:09:06.903 回答
2

我从 NASA GIBS tileserver 中找到了一些可访问的底图图像。您也许可以对其他 tileserver 使用相同的方法。

http://earthdata.nasa.gov/wiki/main/index.php/GIBS_Supported_Clients#Script-level_access_to_imagery

Thi 在 python 子shell 中使用 GDAL 的 gdal_translate:

import subprocess
import matplotlib.pyplot
import mpl_toolkits.basemap

l,u,r,d=(7.4319,52.0632,7.848,51.8495)

subprocess.call ('gdal_translate -of GTiff -outsize 400 400 -projwin {l} {u} {r} {d} TERRA.xml Background.tif'.format(l=l,u=u,r=r,d=d),shell=True )

im=matplotlib.pyplot.imread('Background.tif')

m = mpl_toolkits.basemap.Basemap(llcrnrlon=l, urcrnrlat=u, urcrnrlon=r, llcrnrlat=d,
    resolution='h', projection='merc')
m.imshow(im, interpolation='lanczos', origin='upper')

matplotlib.pyplot.show()

这需要来自上述链接的 TERRA.xml 文件,尽管您也可以内联 XML。

于 2012-09-14T17:44:34.090 回答