不用某度、某德个性地图编辑器,用Python几行代码绘制任何地区的风格化城市肌理

2023-11-24 16:11:52 浏览数 (1)

话不多说先上图:

richmond_district

port_au_prince

monrovia_liberia

上海外滩

上海人民广场

杭州

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功能,对新手很友好。

DataSpell软件界面

代码语言:javascript复制
#测试是否安装好了
import osmnx as ox
ox.__version__
# 我的是 1.2.2 
# 如果用conda install osmnx安装的应该会是1.0.2有些会出错

说安装过程中踩的坑:

  • 一定要转为安装osmnx装一个新环境,避免python包之间的兼容问题。
  • 不要在osmnx包内运行update命令即更新包,会出现错误。

2. 生成城市肌理图片

代码语言:javascript复制
# 导入库
import osmnx as ox
from IPython.display import Image
%matplotlib inline
代码语言:javascript复制
# 可选,储存图片路径
img_folder = "images"
extension = "png"
size = 480 #图片长宽大小

代码语言:javascript复制
# 定义函数
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})

就这几行带代码,随随便便出图。

参考:

  • GitHub含有操作案例
  • OSMnx官方文档

0 人点赞