一个关于用户运动轨迹的项目,接触到OSM及
OSMnx包。
OSM是Open Street Map开源地图数据库,Geoff Boeing的博客提供了
OSMnx的Python
包。
OSMnx,简称ox。其中主要分为两种地图模型,一种是区块数据(gdf_from_place),另外一种是道路模型(graph_from_place)。
之前在openstreetmap下载了杭州的路网结构,但是吧,文件打开了真的一时不知道怎么处理。恰好看到了osmnx的python包,但是这个包吧,真的是有点让人头大。必须写个博客排雷。
我安装了python3.7,也装了anaconda3。为了方便之后的处理,所以用的anaconda3的环境中装的osmnx。安装操作很简单。
conda install -c conda-forge o...
无论您是想找到从A地到B地的最佳路线,还是试图分析社区进入超市的情况以识别食物沙漠,以网络的形式构建问题,以街道为边缘,通常都是最简单和最容易解决的方法。
但是,在开始构建街道网络之前,您需要数据。谷歌地图可能是大多数人想到地理信息时的首选,但遗憾的是它的API不是免费的。值得庆幸的是,有一个免费的开源替代方案,其中
包含许多相同的数据:OpenStreetMaps(OSM)项目。
- 项目用的mapbox-gl+echarts的前端展示,mapbox-gl数据源为osm在线地图。
- 但是需要部署在内网(mapbox和地图服务),则无法使用在线地图,第一方案是下载osm的瓦片到本地用tomcat部署
- 使用Maperitive下载地图瓦片,但是在线的地图用此工具下载瓦片很慢,于是解决方案就是使用Maperitive所提供的加载osm的地图数据
在使用 OSMnx 进行地图分析时,可以通过以下步骤访问节点:
1. 使用 `ox.graph_from_place` 或 `ox.graph_from_address` 函数获取地图的图形数据。
2. 使用 `ox.plot_graph` 函数将图形数据可视化,以便更好地理解图形。
3. 使用 `G.nodes` 属性获取地图上的所有节点。这将返回一个字典,其中键是节点的 ID,值是一个字典,包含节点的经度、纬度和其他属性。
4. 使用节点 ID 访问特定节点的属性。例如,可以使用 `G.nodes[node_id]['x']` 和 `G.nodes[node_id]['y']` 访问节点的经度和纬度。
下面是一个示例代码,用于获取地图上的所有节点并输出前 10 个节点的经度和纬度:
```python
import osmnx as ox
# 获取地图的图形数据
G = ox.graph_from_place('Piedmont, California, USA', network_type='drive')
# 可视化地图
ox.plot_graph(G)
# 获取所有节点
nodes = G.nodes
# 输出前10个节点的经度和纬度
for node_id in list(nodes)[:10]:
print("Node ID: ", node_id)
print("Longitude: ", nodes[node_id]['x'])
print("Latitude: ", nodes[node_id]['y'])
注意:在访问节点属性时,请确保节点 ID 存在于节点字典中。