Upgrade to new georust, which subsumes geo-boolean-op.

Based on https://github.com/michaelkirk/abstreet/tree/mkirk/test-bools

Note geojson isn't upgraded yet, due to contours. And the old version of
geo is still pulled in, due to polylabel.
This commit is contained in:
Dustin Carlino 2022-06-13 17:30:51 +01:00
parent 58a1a5e0a2
commit 34487a3322
16 changed files with 249 additions and 61 deletions

245
Cargo.lock generated
View File

@ -174,6 +174,15 @@ dependencies = [
"system-deps",
]
[[package]]
name = "atomic-polyfill"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e14bf7b4f565e5e717d7a7a65b2a05c0b8c96e4db636d6f780f03b15108cdd1b"
dependencies = [
"critical-section",
]
[[package]]
name = "atty"
version = "0.2.14"
@ -191,6 +200,21 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "bare-metal"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3"
dependencies = [
"rustc_version 0.2.3",
]
[[package]]
name = "bare-metal"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603"
[[package]]
name = "base64"
version = "0.13.0"
@ -248,6 +272,18 @@ dependencies = [
"which",
]
[[package]]
name = "bit_field"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4"
[[package]]
name = "bitfield"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719"
[[package]]
name = "bitflags"
version = "1.2.1"
@ -441,7 +477,7 @@ dependencies = [
"anyhow",
"csv",
"fs-err",
"geo",
"geo 0.21.0",
"geojson",
"geom",
"importer",
@ -689,6 +725,18 @@ dependencies = [
"bindgen 0.56.0",
]
[[package]]
name = "cortex-m"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd20d4ac4aa86f4f75f239d59e542ef67de87cce2c282818dc6e84155d3ea126"
dependencies = [
"bare-metal 0.2.5",
"bitfield",
"embedded-hal",
"volatile-register",
]
[[package]]
name = "cpal"
version = "0.13.3"
@ -723,6 +771,18 @@ dependencies = [
"cfg-if 1.0.0",
]
[[package]]
name = "critical-section"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95da181745b56d4bd339530ec393508910c909c784e8962d15d722bacf0bcbcd"
dependencies = [
"bare-metal 1.0.0",
"cfg-if 1.0.0",
"cortex-m",
"riscv",
]
[[package]]
name = "csv"
version = "1.1.6"
@ -954,6 +1014,16 @@ version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]]
name = "embedded-hal"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff"
dependencies = [
"nb 0.1.3",
"void",
]
[[package]]
name = "encoding_rs"
version = "0.8.28"
@ -1269,7 +1339,7 @@ dependencies = [
"enumset",
"fs-err",
"futures-channel",
"geo",
"geo 0.21.0",
"geojson",
"geom",
"getrandom",
@ -1390,29 +1460,34 @@ dependencies = [
"log",
"num-traits",
"robust",
"rstar",
"rstar 0.8.3",
]
[[package]]
name = "geo-booleanop"
version = "0.3.2"
source = "git+https://github.com/21re/rust-geo-booleanop#188f016e44a3ec737ce8e279215caf558443de89"
name = "geo"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20f1cd8cc66ae5c52a2b9328e3562adde921b203a10d6ea0ac24c349de4c42c4"
dependencies = [
"float_next_after",
"geo-types",
"geographiclib-rs",
"log",
"num-traits",
"robust",
"rstar 0.9.3",
]
[[package]]
name = "geo-types"
version = "0.7.4"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9537881a3d2941ff3fe901e744c45f0fa4c142334f499f27d26be1d72299ba8"
checksum = "5696e8138fbc44f64edc88b423afbe5a8f635df003376b3a57087e61a8ae7b66"
dependencies = [
"approx",
"num-traits",
"rstar",
"rstar 0.8.3",
"rstar 0.9.3",
]
[[package]]
@ -1445,8 +1520,7 @@ dependencies = [
"anyhow",
"earcutr",
"fs-err",
"geo",
"geo-booleanop",
"geo 0.21.0",
"geojson",
"histogram",
"instant",
@ -1662,6 +1736,15 @@ dependencies = [
"byteorder",
]
[[package]]
name = "hash32"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
dependencies = [
"byteorder",
]
[[package]]
name = "hashbrown"
version = "0.9.1"
@ -1712,7 +1795,20 @@ checksum = "634bd4d29cbf24424d0a4bfcbf80c6960129dc24424752a7d1d1390607023422"
dependencies = [
"as-slice",
"generic-array 0.14.4",
"hash32",
"hash32 0.1.1",
"stable_deref_trait",
]
[[package]]
name = "heapless"
version = "0.7.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a08e755adbc0ad283725b29f4a4883deee15336f372d5f61fae59efec40f983"
dependencies = [
"atomic-polyfill",
"hash32 0.2.1",
"rustc_version 0.4.0",
"spin 0.9.3",
"stable_deref_trait",
]
@ -1876,7 +1972,7 @@ dependencies = [
"csv",
"fs-err",
"gdal",
"geo",
"geo 0.21.0",
"geojson",
"geom",
"hashbrown 0.9.1",
@ -2130,7 +2226,7 @@ dependencies = [
"anyhow",
"contour",
"flate2",
"geo",
"geo 0.21.0",
"geojson",
"geom",
"getrandom",
@ -2387,6 +2483,21 @@ dependencies = [
"windows-sys",
]
[[package]]
name = "nb"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f"
dependencies = [
"nb 1.0.0",
]
[[package]]
name = "nb"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "546c37ac5d9e56f55e73b677106873d9d9f5190605e41a856503623648488cae"
[[package]]
name = "ndk"
version = "0.3.0"
@ -2920,7 +3031,7 @@ version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9eacb1d18495675b5b9a56b92ea542e9ff6ebc98de4a166329ca9a1fbf408f88"
dependencies = [
"geo",
"geo 0.20.1",
"libc",
"num-traits",
"thiserror",
@ -2935,8 +3046,7 @@ dependencies = [
"anyhow",
"flatgeobuf",
"futures",
"geo",
"geo-booleanop",
"geo 0.21.0",
"geojson",
"geom",
"geozero",
@ -3257,12 +3367,33 @@ dependencies = [
"cc",
"libc",
"once_cell",
"spin",
"spin 0.5.2",
"untrusted",
"web-sys",
"winapi",
]
[[package]]
name = "riscv"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6907ccdd7a31012b70faf2af85cd9e5ba97657cc3987c4f13f8e4d2c2a088aba"
dependencies = [
"bare-metal 1.0.0",
"bit_field",
"riscv-target",
]
[[package]]
name = "riscv-target"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88aa938cda42a0cf62a20cfe8d139ff1af20c2e681212b5b34adb5a58333f222"
dependencies = [
"lazy_static",
"regex",
]
[[package]]
name = "robust"
version = "0.2.3"
@ -3294,18 +3425,47 @@ version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce61d743ebe516592df4dd542dfe823577b811299f7bee1106feb1bbb993dbac"
dependencies = [
"heapless",
"heapless 0.6.1",
"num-traits",
"pdqselect",
"smallvec",
]
[[package]]
name = "rstar"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b40f1bfe5acdab44bc63e6699c28b74f75ec43afb59f3eda01e145aff86a25fa"
dependencies = [
"heapless 0.7.13",
"num-traits",
"smallvec",
]
[[package]]
name = "rustc-hash"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustc_version"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
dependencies = [
"semver 0.9.0",
]
[[package]]
name = "rustc_version"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
dependencies = [
"semver 1.0.3",
]
[[package]]
name = "rustls"
version = "0.19.1"
@ -3399,13 +3559,22 @@ dependencies = [
"untrusted",
]
[[package]]
name = "semver"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
dependencies = [
"semver-parser 0.7.0",
]
[[package]]
name = "semver"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
dependencies = [
"semver-parser",
"semver-parser 0.10.2",
]
[[package]]
@ -3417,6 +3586,12 @@ dependencies = [
"serde",
]
[[package]]
name = "semver-parser"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "semver-parser"
version = "0.10.2"
@ -3609,6 +3784,15 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "spin"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c530c2b0d0bf8b69304b39fe2001993e267461948b890cd037d8ad4293fa1a0d"
dependencies = [
"lock_api",
]
[[package]]
name = "stable_deref_trait"
version = "1.2.0"
@ -4131,6 +4315,12 @@ dependencies = [
"unicode-vo",
]
[[package]]
name = "vcell"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002"
[[package]]
name = "vec_map"
version = "0.8.2"
@ -4149,6 +4339,21 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
[[package]]
name = "void"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
[[package]]
name = "volatile-register"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ee8f19f9d74293faf70901bc20ad067dc1ad390d2cbf1e3f75f721ffee908b6"
dependencies = [
"vcell",
]
[[package]]
name = "walkdir"
version = "2.3.2"

View File

@ -32,7 +32,3 @@ members = [
# update dependencies often).
[profile.dev.package."*"]
opt-level = 3
[patch.crates-io]
# Waiting for a release: https://github.com/21re/rust-geo-booleanop/pull/27
geo-booleanop = { git = "https://github.com/21re/rust-geo-booleanop" }

View File

@ -28,7 +28,7 @@ downcast-rs = "1.2.0"
enumset = "1.0.3"
fs-err = "2.6.0"
futures-channel = { version = "0.3.12"}
geo = "0.20.1"
geo = "0.21.0"
geojson = { version = "0.22.2", features = ["geo-types"] }
geom = { path = "../../geom" }
getrandom = { version = "0.2.3", optional = true }

View File

@ -17,7 +17,7 @@ abstutil = { path = "../../abstutil" }
anyhow = "1.0.38"
contour = "0.4.0"
flate2 = "1.0.20"
geo = "0.20.1"
geo = "0.21.0"
geojson = { version = "0.22.2", features = ["geo-types"] }
geom = { path = "../../geom" }
getrandom = { version = "0.2.3", optional = true }

View File

@ -13,7 +13,7 @@ pub fn write_geojson_file(ctx: &EventCtx, app: &App) -> Result<String> {
}
fn geojson_string(ctx: &EventCtx, app: &App) -> Result<String> {
use geo::algorithm::map_coords::MapCoordsInplace;
use geo::MapCoordsInPlace;
use geojson::{Feature, FeatureCollection, GeoJson, Geometry, Value};
let map = &app.map;
@ -97,9 +97,9 @@ fn geojson_string(ctx: &EventCtx, app: &App) -> Result<String> {
// This could be a Polygon, MultiPolygon, LineString
let mut geom: geo::Geometry<f64> = feature.geometry.take().unwrap().value.try_into()?;
geom.map_coords_inplace(|c| {
let gps = Pt2D::new(c.0, c.1).to_gps(gps_bounds);
(gps.x(), gps.y())
geom.map_coords_in_place(|c| {
let gps = Pt2D::new(c.x, c.y).to_gps(gps_bounds);
(gps.x(), gps.y()).into()
});
// geo to geojson

View File

@ -10,7 +10,7 @@ abstutil = { path = "../abstutil" }
anyhow = "1.0.38"
csv = "1.1.4"
fs-err = "2.6.0"
geo = "0.20.1"
geo = "0.21.0"
geojson = { version = "0.22.2", features = ["geo-types"] }
geom = { path = "../geom" }
importer = { path = "../importer" }

View File

@ -10,9 +10,8 @@ abstutil = { path = "../abstutil" }
anyhow = "1.0.38"
earcutr = "0.1.1"
fs-err = "2.6.0"
geo = "0.20.1"
geo-booleanop = "0.3.2"
geojson = { version = "0.22.0", features = ["geo-types"] }
geo = "0.21.0"
geojson = { version = "0.22.2", features = ["geo-types"] }
histogram = "0.6.9"
instant = "0.1.7"
ordered-float = { version = "2.4.0", features=["serde"] }

View File

@ -2,8 +2,7 @@ use std::collections::BTreeMap;
use aabb_quadtree::geom::{Point, Rect};
use aabb_quadtree::QuadTree;
use geo::algorithm::contains::Contains;
use geo::prelude::{ClosestPoint, EuclideanDistance};
use geo::{ClosestPoint, Contains, EuclideanDistance};
use crate::conversions::pts_to_line_string;
use crate::{Bounds, Distance, Pt2D};

View File

@ -2,11 +2,7 @@ use std::convert::TryFrom;
use std::fmt;
use anyhow::Result;
use geo::algorithm::area::Area;
use geo::algorithm::convex_hull::ConvexHull;
use geo::algorithm::intersects::Intersects;
use geo::algorithm::simplifyvw::SimplifyVWPreserve;
use geo_booleanop::boolean::BooleanOp;
use geo::{Area, BooleanOps, ConvexHull, Intersects, SimplifyVWPreserve};
use serde::{Deserialize, Serialize};
use abstutil::Tags;
@ -349,9 +345,9 @@ impl Polygon {
return geo::MultiPolygon(Vec::new());
}
let mut result = geo::MultiPolygon(vec![to_geo(list.pop().unwrap().points())]);
let mut result = geo::MultiPolygon(vec![list.pop().unwrap().into()]);
for p in list {
result = result.union(&to_geo(p.points()));
result = result.union(&p.into());
}
result
}

View File

@ -1,6 +1,6 @@
use std::fmt;
use geo::algorithm::simplify::Simplify;
use geo::Simplify;
use ordered_float::NotNan;
use serde::{Deserialize, Serialize};

View File

@ -16,7 +16,7 @@ anyhow = "1.0.38"
collisions = { path = "../collisions" }
convert_osm = { path = "../convert_osm" }
csv = "1.1.4"
geo = "0.20.1"
geo = "0.21.0"
geojson = { version = "0.22.2", features = ["geo-types"] }
geom = { path = "../geom" }
gdal = { version = "0.8.0", optional = true, features = ["bindgen"] }

View File

@ -1,8 +1,7 @@
use std::convert::TryInto;
use anyhow::Result;
use geo::algorithm::area::Area;
use geo::algorithm::contains::Contains;
use geo::{Area, Contains};
use geojson::GeoJson;
use abstutil::Timer;

View File

@ -10,7 +10,7 @@ abstutil = { path = "../abstutil" }
anyhow = "1.0.38"
flatgeobuf = { version = "0.5" }
futures = "0.3.12"
geo = "0.20.1"
geo = "0.21.0"
geojson = { version = "0.22.2", features = ["geo-types"] }
geom = { path = "../geom" }
geozero = "0.7"
@ -19,7 +19,6 @@ map_model = { path = "../map_model" }
rand = "0.8.3"
rand_distr = "0.4.0"
rand_xorshift = "0.3.0"
geo-booleanop = "0.3.2"
serde = "1.0.123"
serde_json = "1.0.61"
sim = { path = "../sim" }

View File

@ -1,4 +1,4 @@
use geo::algorithm::{area::Area, contains::Contains};
use geo::{Area, BooleanOps, Contains};
use rand::Rng;
use rand_xorshift::XorShiftRng;
@ -53,7 +53,6 @@ pub fn distribute_population_to_homes(
// If the area is partly out-of-bounds, then scale down the number of residents linearly
// based on area of the overlapping part of the polygon.
use geo_booleanop::boolean::BooleanOp;
let pct_overlap = polygon.intersection(&map_boundary).unsigned_area() / polygon.unsigned_area();
let num_residents = (pct_overlap * (population as f64)) as usize;
debug!(

View File

@ -1,5 +1,5 @@
use anyhow::Result;
use geo::algorithm::intersects::Intersects;
use geo::{BoundingRect, Intersects, MapCoordsInPlace};
use geom::{GPSBounds, Polygon};
@ -13,11 +13,10 @@ impl CensusArea {
use flatgeobuf::HttpFgbReader;
use geozero::geo_types::GeoWriter;
use geo::algorithm::{bounding_rect::BoundingRect, map_coords::MapCoordsInplace};
let mut geo_map_area: geo::Polygon<_> = map_area.clone().into();
geo_map_area.map_coords_inplace(|c| {
let projected = geom::Pt2D::new(c.0, c.1).to_gps(bounds);
(projected.x(), projected.y())
geo_map_area.map_coords_in_place(|c| {
let projected = geom::Pt2D::new(c.x, c.y).to_gps(bounds);
(projected.x(), projected.y()).into()
});
// See the import handbook for how to prepare this file.
@ -76,10 +75,7 @@ impl CensusArea {
}
let mut polygon = geo_polygon.clone();
polygon.map_coords_inplace(|(x, y)| {
let point = geom::LonLat::new(*x, *y).to_pt(bounds);
(point.x(), point.y())
});
polygon.map_coords_in_place(|c| geom::LonLat::new(c.x, c.y).to_pt(bounds).into());
results.push(CensusArea {
polygon,
population,

View File

@ -9,7 +9,7 @@ aabb-quadtree = "0.1.0"
abstio = { path = "../abstio" }
abstutil = { path = "../abstutil" }
anyhow = "1.0.38"
geojson = { version = "0.22.0", features = ["geo-types"] }
geojson = { version = "0.22.2", features = ["geo-types"] }
geom = { path = "../geom" }
kml = { path = "../kml" }
log = "0.4.14"