不用某度、某德个性地图编辑器,用Python几行代码绘制任何地区的风格化城市肌理
原创:Ing_ideas
话不多说先上图:
1.OSMnx 简介
OSMnx 是Python的一个包,建立在 GeoPandas、NetworkX 和 matplotlib 之上,可以调用 OpenStreetMap 的 地图数据,所以不限调用数据大小、次数限制就可以获取包括道路、建筑物、附属设施等地图数据,可以进行拓扑和空间分析,计算并可视化最短路径,绘制交通等时圈图;并且可以导出为shapefile、GeoPackages等格式,实现与Arcgis等软件的交互。
今天仅用来介绍关于绘制地图图底的功能。首先我们需要配置python环境,通过Anaconda配置其实非常简单:
--OSMnx环境配置:
利用清华大学开源软件镜像站下载conda安装包,安装好之后修改默认仓库为镜像源仓库。导入OSMnx环境文件,下载OSMnx的conda环境,点击可下载,将osmnx.yml导入到conda环境中即可。启动相应的IDE运行代码测试一下,我用的是jetbrains(pycharm)家的DataSpell开源软件,可以连接和编写jupyter nootbook的文件,还带有代码补全功能和debug功能,对新手很友好。
#测试是否安装好了
import osmnx as ox
ox.__version__
# 我的是 1.2.2
# 如果用conda install osmnx安装的应该会是1.0.2有些会出错
说安装过程中踩的坑:
- 一定要转为安装osmnx装一个新环境,避免python包之间的兼容问题。
- 不要在osmnx包内运行update命令即更新包,会出现错误。
2. 生成城市肌理图片
# 导入库
import osmnx as ox
from IPython.display import Image
%matplotlib inline
# 可选,储存图片路径
img_folder = "images"
extension = "png"
size = 480 #图片长宽大小
# 定义函数
def make_plot(place,point,
network_type="drive",
dpi=80,dist=1000,default_width=4,
street_widths=None): # dists 填入米
tags = {"building": True}
fp = f"./{img_folder}/{place}.{extension}" # 图片的地址保存
gdf = ox.geometries_from_point(point, tags, dist=dist)
fig, ax = ox.plot_figure_ground(
point=point,
dist=dist,
network_type=network_type,
default_width=default_width,
street_widths=street_widths,
save=False,
show=False,
close=True,
)
fig, ax = ox.plot_footprints(
gdf, ax=ax, filepath=fp, dpi=dpi, save=True, show=False, close=True
)
return Image(fp, height=size, width=size)
#执行函数
place = "shanghai"
point = (31.238850562378246, 121.48578354186554) # 填入wgs1984坐标
make_plot(place, point,network_type="all", default_width=2, street_widths={"primary": 6})
各大平台欢迎关注
参考: