Iur*_*usa 8 gis openstreetmap python-2.7 matplotlib-basemap
这应该很简单,但是当我寻找它时,我只能找到Web包.我需要的东西比在这个博客上的导向更好.也许使用.oms文件或shapefile.某种方式给bbox并在Basemap地图上获取OpenStreetMap背景.
我在Stack上发现了一些像这样的问题,但答案指向或下载.pngOpenStreetMap网站上的文件,或使用一些网络包.
Phi*_*arz 10
我建议不要尝试做一些有用的工作,但这些工作还没有完成.有一种简单的方法可以通过Mplleaflet实现您的目标. https://github.com/jwass/mplleaflet 该库允许您在美丽的交互式openstreetmap上可视化地理数据.自动执行长lat格式的数据映射投影.
在windows和ubuntu中安装很简单:
pip install mplleaflet
Run Code Online (Sandbox Code Playgroud)
您可以从提供的示例开始,然后从那里开始.
对于那些使用 的人来说Cartopy,这相对简单:
import matplotlib.pyplot as pl
import numpy as np
import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt
request = cimgt.OSM()
# Bounds: (lon_min, lon_max, lat_min, lat_max):
extent = [1, 13, 45, 53]
ax = pl.axes(projection=request.crs)
ax.set_extent(extent)
ax.add_image(request, 5) # 5 = zoom level
# Just some random points/lines:
pl.scatter(4.92, 51.97, transform=ccrs.PlateCarree())
pl.plot([4.92, 9], [51.97, 47], transform=ccrs.PlateCarree())
Run Code Online (Sandbox Code Playgroud)
这会产生:
如今,有许多库可以为您做到这一点-smopy,folium和tilemapbase是我最近使用的三个示例。
这些工具中的每一个都从托管OSM或其他(Stamen,Carto等)地图瓦片的多个服务器之一中获取地图瓦片,然后允许您使用matplotlib在其上显示和绘图。Tilemapbase还会在本地缓存图块,以便下次不会再次获取它们。
但是,根据我最近的经验,似乎还没有现成的工具可以使用离线图块集(例如压缩的.mbtiles文件)作为matplotlib绘图的背景。
此链接包含对上述工具的调查以及更多内容-https://github.com/ispmarin/maps
我在先前的回答中提到,Tilemapbase无法在世界上某些地理位置使用,因此明确建议不要使用它。但是事实证明我错了,对此我深表歉意。实际上效果很好!在我的案例中,问题非常简单-我在获取图块时颠倒了顺序或纬度和经度,因此它总是在某些地理位置获取空白图块,这使我假设它不适用于那些位置。
我在github上提出了这个问题,开发人员立即解决了这个问题。在这里查看-https: //github.com/MatthewDaws/TileMapBase/issues/7
注意响应:
坐标应按(1)经度,(2)纬度的顺序提供。如果您是从Google地图复制的,则它们的纬度/经度顺序必须翻转。因此,您的地图图像不是空的,它只是挪威北部海洋中的一个位置。
从开发人员本人:
是的,当我编写代码时,似乎没有通用的订购标准。因此,我选择了与Google Maps不同的一种。方法名称
from_lonlat应提示正确的顺序...