forked from georust/geozero
-
Notifications
You must be signed in to change notification settings - Fork 0
/
polylabel.rs
31 lines (30 loc) · 1.06 KB
/
polylabel.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use flatgeobuf::*;
use geo::contains::Contains;
use geo::Geometry;
use geozero::error::Result;
use geozero_core::geo_types::Geo;
use polylabel::polylabel;
use std::fs::File;
use std::io::BufReader;
#[test]
fn country_labels() -> Result<()> {
let mut file = BufReader::new(File::open("tests/data/countries.fgb")?);
let mut fgb = FgbReader::open(&mut file)?;
fgb.select_all()?;
while let Some(feature) = fgb.next()? {
let props = feature.properties()?;
let geometry = feature.geometry().unwrap();
let mut geo = Geo::new();
geometry.process(&mut geo, GeometryType::MultiPolygon)?;
if let Geometry::MultiPolygon(mpoly) = geo.geometry() {
if let Some(poly) = &mpoly.0.iter().next() {
let label_pos = polylabel(&poly, &0.10).unwrap();
println!("{}: {:?}", props["name"], label_pos);
if !vec!["Bermuda", "Falkland Islands"].contains(&props["name"].as_str()) {
assert!(mpoly.contains(&label_pos));
}
}
}
}
Ok(())
}