使用OSM或其他shapefile和matplotloib绘制地图以用于标准化报告

时间:2017-08-08 14:30:07

标签: gis openstreetmap gdal matplotlib-basemap geopandas

我们正在为我们的活动制定标准化报告。我需要的最后一个图是显示活动的地理区域(有近100个位置)。

这些报告的输出为PDF letter或A4 size

该报告是一个mplotlib图,其中:

fig = plt.figure(figsize=(8.5, 11))

rect0 = 0, .7,, 0.18, 0.3
rect1 = .3, .7, .18, .3
rect2 = .8, .29, .2, .7
rect3 = 0, 0, .8, .4

ax1 = fig.add_axes(rect0)
ax2 = fig.add_axes(rect1)
ax3 = fig.add_axes(rect2)
ax4 = fig.add_axes(rect3)

轴1-3的内容和布局已确定并且工作正常。然而,ax4是地图内容的显示位置(理想情况下)。

我希望能做到这样的事情:

map1 = Basemap(llcrnrlon=6.819087, llcrnrlat=46.368452, urcrnrlon=6.963978,
               urcrnrlat=46.482906, resolution = 'h', projection='tmerc',
               lon_0=6.88, lat_0=46.42, ax=4)

map1.readshapefile('a valid shape file that works') #<----- this is the sticking point


map1.draw(insert locator coordinates)
plt.savefig(report to be inserted to document)
plt.show()

但是,我还没有成功获得适用于开放街道地图或GIS的形状文件。

我也没有确定从openstreetmaps转换数据的正确过程。

我也没有确定从OSM / xml文档或转换后的GeoJSON文档中提取该信息的过程。

理想情况下,我想从openstreetmaps中获取边界框信息并直接生成地图。

获取与.readshapefile()调用一起使用的shapefile的过程是什么?

或者我如何将定义的地图放入Matplotlib轴?

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用cartopy.io.img_tiles模块,该模块会自动提取OSM磁贴以供cartopy使用。使用预渲染的瓷砖可以消除处理和设计单个shapefile / XML的麻烦。

请在cartopy中使用这些图块查看cartopy docs