1 unstable release
0.1.0 | Apr 28, 2024 |
---|
#217 in Geospatial
Used in aeloc
18KB
250 lines
osm-rs
Query the OpenStreetMap database.
Use with absolute caution. Querying OSM can hog down an Overpass server easily.
Examples
Bounding Boxes
use osm_rs::overpass::{BoundingBox, Config};
#[tokio::main]
async fn main() {
let c: Config = Config {
url: "https://overpass-api.de/api/interpreter".to_string(),
timeout: 25,
key: "amenity".to_string(),
val: "cafe".to_string(),
};
let b: BoundingBox = BoundingBox {
xmin: 51.305219521963295,
ymin: -0.7690429687500001,
xmax: 51.82219818336938,
ymax: 0.5273437500000064,
};
let resp = b.search(&c).await.expect("failed query");
}
Geocode
use osm_rs::nominatim::{Config, Geocode};
#[tokio::main]
async fn main() {
let c: Config = Config {
url: "https://nominatim.openstreetmap.org/search".to_string(),
timeout: 25,
};
let g = Geocode {
q: Some("Boston".to_string()),
street: None,
city: None,
county: None,
state: None,
country: None,
postalcode: None,
};
let resp = g.search(&c).await.unwrap();
assert_eq!(resp[0].lat, 42.3554334);
assert_eq!(resp[0].lon, -71.060511);
}
Reverse geocode
use osm_rs::nominatim::{Config, ReverseGeocode};
#[tokio::main]
async fn main() {
let c: Config = Config {
url: "https://nominatim.openstreetmap.org/reverse".to_string(),
timeout: 25,
};
let g = ReverseGeocode {
lat: 42.3554334,
lon: -71.060511,
};
let resp = g.search(&c).await.unwrap();
assert_eq!(resp.osm_id, 5331978048);
}
Credits
Roland Olbricht wrote the Overpass interpreter, without which this tool wouldn't exist.
Dependencies
~8–20MB
~262K SLoC