1 个不稳定版本
新版本 0.1.1 | 2024年8月18日 |
---|
#1210 in 数据结构
每月 129 次下载
30KB
460 行
OSMGraph
osmgraph
是一个用于快速从OpenStreetMap (OSM) 获取数据并将其格式化为图数据结构的crate,该数据结构可用于各种计算机科学任务和问题。
OpenStreetMap 是一个免费的世界地图wiki。所有数据都由用户以类似于维基百科的方式创建和共享。在开源许可证下,您可以免费使用这些数据,具体信息可在此处找到。
此crate查询OverpassAPI,这是一个用于获取OSM数据的 免费使用 API。我提醒此crate的用户,不要在开发过程中意外地向服务器发送大量请求。一般来说,在开发过程中,尽量一次性查询并保存结果到本地。Overpass使用的查询语言称为Overpass查询语言,您可以在此了解如何使用它。
在计算机科学和数学中,图是由节点和边组成的一种结构。节点可以代表任何东西。边代表两个节点之间的连接。在地图的上下文中,节点代表地球上的一些点,边代表可以在这些节点之间移动的方式(如高速公路、道路、人行道)。某些边可以是单向的,有向图的概念对于表示单行道很有用;然而,在此crate的当前版本中,我们不支持单行道。即将推出!
此库的图部分高度依赖于petgraph crate。这为我们提供了处理图和一些算法(如A*)的高效接口。
示例
use osmgraph::graph::{OSMGraph, create_graph};
use osmgraph::overpass_api::{OverpassResponse, osm_request_blocking};
use serde_json::Value;
// Query to fetch all data related to "Selinsgrove" town in Pennsylvania
let query = String::from(r#"
[out:json];
area[name="Selinsgrove"]->.searchArea;
(
way(area.searchArea);
node(area.searchArea);
);
out body;
>;
out skel qt;
"#);
// Make the request and get the resulting data in a raw string
let response: String = osm_request_blocking(query)
.expect("Was not able to make request!");
// Parse json
let json: OverpassResponse = serde_json::from_str(&response)
.expect("Was not able to parse data from json!");
let elements: &Vec<Value> = json.elements().as_array()
.expect("Was not able to retrieve elements from json!");
//Create graph
let g: OSMGraph = create_graph(elements)
.expect("Was not able to create graph from json!");
依赖项
~7–19MB
~267K SLoC