使用OverPy API批量获取OpenStreetMap(OSM)城市路网png图片和svg矢量图

在地理信息系统(GIS)和数据可视化领域,获取城市路网的图像对于分析和展示城市交通结构至关重要。OpenStreetMap (OSM) 是一个免费且开放的地理数据源,而OverPy 是一个用于访问OSM数据的Python库。本文将详细介绍如何使用OverPy API批量获取多个城市的路网数据,并生成PNG图片和SVG矢量图。

在这里插入图片描述

环境准备

首先,我们需要安装所需的Python库。运行以下命令以安装OverPy和matplotlib:

pip install overpy matplotlib

使用OverPy API获取城市路网数据

OverPy 允许我们通过OSM的API接口查询和获取指定区域的路网数据。以下是一个示例,展示如何获取城市的路网数据:

import overpy

api = overpy.Overpass()
query = f"""
	[out:json];
	(
	  way["highway"]({bbox});
	  relation["highway"]({bbox});
	);
	out body;
	>;
	out skel qt;
"""
result = api.query(query)
return result

在上面的代码中,bbox 是城市的边界框(bounding box),格式为 (south,west,north,east)。例如,对于北京,bbox 可以是 (39.4, 115.7, 41.6, 117.4)

绘制路网

使用matplotlib库,我们可以将获取到的路网数据绘制为图片:

import matplotlib.pyplot as plt

plt.figure(dpi=256, figsize=(32, 32))
# plt.rcParams['image.interpolation'] = 'nearest'
plt.axis('off')
plt.xlim(lon)
plt.ylim(lat)
plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0)
plt.margins(0, 0)
for way in result.ways:
    nodes = way.get_nodes()
    x = []; y = []
    for node in nodes:
        x.append(node.lon)
        y.append(node.lat)
    plt.plot(x, y, color='black')
plt.close()

保存为PNG图片或SVG矢量图

我们可以生成PNG图片,也可以生成SVG格式的矢量图:

plt.savefig("ways/%s.png" % name)   # 保存为png格式
plt.savefig("svgs/%s.svg" % name, format='svg')  # 保存为svg格式

批量处理多个城市

为了批量获取多个城市的路网数据并生成相应的PNG和SVG文件,我们可以创建一个包含城市名称及其边界框的列表,并循环处理每个城市:

cities = [
    {"name": "Beijing", "bbox": (39.4, 115.7, 41.6, 117.4)},
    {"name": "Shanghai", "bbox": (30.4, 120.8, 32.4, 122.2)},
    {"name": "Guangzhou", "bbox": (22.5, 112.9, 23.7, 114.1)}
]

下载代码包中包含了一个中国城市经纬度的json文件,可以直接进行批量处理。

如果你觉得本篇博文有帮助,可以购买本资源支持作者(包含可以直接运行的示例代码):Python获取openstreetmap(OSM)路网信息 自动爬取城市路网图片和矢量图

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两只程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值