Skip to content

Commit e21865f

Browse files
committed
wkt adapted for 3d/m change in geo
1 parent dbd80f2 commit e21865f

File tree

4 files changed

+38
-41
lines changed

4 files changed

+38
-41
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ keywords = ["geo", "geospatial", "wkt"]
1010
edition = "2021"
1111

1212
[dependencies]
13-
geo-types = { version = "0.7.3", optional = true }
13+
geo-types = { git = "https://github.com/nyurik/geo.git", branch = "dim-no-wkt", optional = true }
1414
num-traits = "0.2"
1515
serde = { version = "1.0", default-features = false, optional = true }
1616
thiserror = "1.0.23"

src/conversion.rs

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ where
148148
.map(geo_types::Coordinate::from)
149149
.collect();
150150

151-
geo_types::LineString(coords)
151+
geo_types::LineString::new(coords)
152152
}
153153
}
154154

@@ -173,7 +173,7 @@ where
173173
.map(geo_types::LineString::from)
174174
.collect();
175175

176-
geo_types::MultiLineString(geo_line_strings)
176+
geo_types::MultiLineString::new(geo_line_strings)
177177
}
178178
}
179179

@@ -195,7 +195,7 @@ where
195195
let mut iter = polygon.0.into_iter().map(geo_types::LineString::from);
196196
match iter.next() {
197197
Some(interior) => geo_types::Polygon::new(interior, iter.collect()),
198-
None => geo_types::Polygon::new(geo_types::LineString(vec![]), vec![]),
198+
None => geo_types::Polygon::new(geo_types::LineString::new(vec![]), vec![]),
199199
}
200200
}
201201
}
@@ -224,7 +224,7 @@ where
224224
.map(geo_types::Point::try_from)
225225
.collect::<Result<Vec<_>, _>>()?;
226226

227-
Ok(geo_types::MultiPoint(points))
227+
Ok(geo_types::MultiPoint::new(points))
228228
}
229229
}
230230

@@ -249,7 +249,7 @@ where
249249
.map(geo_types::Polygon::from)
250250
.collect();
251251

252-
geo_types::MultiPolygon(geo_polygons)
252+
geo_types::MultiPolygon::new(geo_polygons)
253253
}
254254
}
255255

@@ -278,7 +278,7 @@ where
278278
.map(Geometry::try_into)
279279
.collect::<Result<_, _>>()?;
280280

281-
Ok(geo_types::GeometryCollection(geo_geometries))
281+
Ok(geo_types::GeometryCollection::new_from(geo_geometries))
282282
}
283283
}
284284

@@ -295,7 +295,7 @@ where
295295
if g.0.is_some() {
296296
geo_types::Point::try_from(g)?.into()
297297
} else {
298-
geo_types::MultiPoint(vec![]).into()
298+
geo_types::MultiPoint::new(vec![]).into()
299299
}
300300
}
301301
Geometry::LineString(g) => geo_types::Geometry::LineString(g.into()),
@@ -358,7 +358,7 @@ mod tests {
358358
#[test]
359359
fn convert_empty_linestring() {
360360
let w_linestring = LineString(vec![]).as_item();
361-
let g_linestring: geo_types::LineString<f64> = geo_types::LineString(vec![]);
361+
let g_linestring: geo_types::LineString<f64> = geo_types::LineString::new(vec![]);
362362
assert_eq!(
363363
geo_types::Geometry::LineString(g_linestring),
364364
w_linestring.try_into().unwrap()
@@ -393,7 +393,7 @@ mod tests {
393393
fn convert_empty_polygon() {
394394
let w_polygon = Polygon(vec![]).as_item();
395395
let g_polygon: geo_types::Polygon<f64> =
396-
geo_types::Polygon::new(geo_types::LineString(vec![]), vec![]);
396+
geo_types::Polygon::new(geo_types::LineString::new(vec![]), vec![]);
397397
assert_eq!(
398398
geo_types::Geometry::Polygon(g_polygon),
399399
w_polygon.try_into().unwrap()
@@ -470,7 +470,8 @@ mod tests {
470470
#[test]
471471
fn convert_empty_multilinestring() {
472472
let w_multilinestring = MultiLineString(vec![]).as_item();
473-
let g_multilinestring: geo_types::MultiLineString<f64> = geo_types::MultiLineString(vec![]);
473+
let g_multilinestring: geo_types::MultiLineString<f64> =
474+
geo_types::MultiLineString::new(vec![]);
474475
assert_eq!(
475476
geo_types::Geometry::MultiLineString(g_multilinestring),
476477
w_multilinestring.try_into().unwrap()
@@ -510,10 +511,11 @@ mod tests {
510511
]),
511512
])
512513
.as_item();
513-
let g_multilinestring: geo_types::MultiLineString<f64> = geo_types::MultiLineString(vec![
514-
vec![(10., 20.), (30., 40.)].into(),
515-
vec![(50., 60.), (70., 80.)].into(),
516-
]);
514+
let g_multilinestring: geo_types::MultiLineString<f64> =
515+
geo_types::MultiLineString::new(vec![
516+
vec![(10., 20.), (30., 40.)].into(),
517+
vec![(50., 60.), (70., 80.)].into(),
518+
]);
517519
assert_eq!(
518520
geo_types::Geometry::MultiLineString(g_multilinestring),
519521
w_multilinestring.try_into().unwrap()
@@ -523,7 +525,7 @@ mod tests {
523525
#[test]
524526
fn convert_empty_multipoint() {
525527
let w_multipoint = MultiPoint(vec![]).as_item();
526-
let g_multipoint: geo_types::MultiPoint<f64> = geo_types::MultiPoint(vec![]);
528+
let g_multipoint: geo_types::MultiPoint<f64> = geo_types::MultiPoint::new(vec![]);
527529
assert_eq!(
528530
geo_types::Geometry::MultiPoint(g_multipoint),
529531
w_multipoint.try_into().unwrap()
@@ -557,7 +559,7 @@ mod tests {
557559
#[test]
558560
fn convert_empty_multipolygon() {
559561
let w_multipolygon = MultiPolygon(vec![]).as_item();
560-
let g_multipolygon: geo_types::MultiPolygon<f64> = geo_types::MultiPolygon(vec![]);
562+
let g_multipolygon: geo_types::MultiPolygon<f64> = geo_types::MultiPolygon::new(vec![]);
561563
assert_eq!(
562564
geo_types::Geometry::MultiPolygon(g_multipolygon),
563565
w_multipolygon.try_into().unwrap()
@@ -650,7 +652,7 @@ mod tests {
650652
])
651653
.as_item();
652654

653-
let g_multipolygon: geo_types::MultiPolygon<f64> = geo_types::MultiPolygon(vec![
655+
let g_multipolygon: geo_types::MultiPolygon<f64> = geo_types::MultiPolygon::new(vec![
654656
geo_types::Polygon::new(
655657
vec![(0., 0.), (20., 40.), (40., 0.), (0., 0.)].into(),
656658
vec![vec![(5., 5.), (20., 30.), (30., 5.), (5., 5.)].into()],
@@ -670,7 +672,7 @@ mod tests {
670672
fn convert_empty_geometrycollection() {
671673
let w_geometrycollection = GeometryCollection(vec![]).as_item();
672674
let g_geometrycollection: geo_types::GeometryCollection<f64> =
673-
geo_types::GeometryCollection(vec![]);
675+
geo_types::GeometryCollection::default();
674676
assert_eq!(
675677
geo_types::Geometry::GeometryCollection(g_geometrycollection),
676678
w_geometrycollection.try_into().unwrap()
@@ -851,12 +853,13 @@ mod tests {
851853
vec![(0., 0.), (20., 40.), (40., 0.), (0., 0.)].into(),
852854
vec![],
853855
);
854-
let g_multilinestring: geo_types::MultiLineString<f64> = geo_types::MultiLineString(vec![
855-
vec![(10., 20.), (30., 40.)].into(),
856-
vec![(50., 60.), (70., 80.)].into(),
857-
]);
856+
let g_multilinestring: geo_types::MultiLineString<f64> =
857+
geo_types::MultiLineString::new(vec![
858+
vec![(10., 20.), (30., 40.)].into(),
859+
vec![(50., 60.), (70., 80.)].into(),
860+
]);
858861
let g_multipoint: geo_types::MultiPoint<f64> = vec![(10., 20.), (30., 40.)].into();
859-
let g_multipolygon: geo_types::MultiPolygon<f64> = geo_types::MultiPolygon(vec![
862+
let g_multipolygon: geo_types::MultiPolygon<f64> = geo_types::MultiPolygon::new(vec![
860863
geo_types::Polygon::new(
861864
vec![(0., 0.), (20., 40.), (40., 0.), (0., 0.)].into(),
862865
vec![],
@@ -868,7 +871,7 @@ mod tests {
868871
]);
869872

870873
let g_geometrycollection: geo_types::GeometryCollection<f64> =
871-
geo_types::GeometryCollection(vec![
874+
geo_types::GeometryCollection::new_from(vec![
872875
geo_types::Geometry::Point(g_point),
873876
geo_types::Geometry::MultiPoint(g_multipoint),
874877
geo_types::Geometry::LineString(g_linestring),

src/deserialize.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ where
127127
/// # extern crate wkt;
128128
/// # extern crate geo_types;
129129
/// # extern crate serde_json;
130-
/// use geo_types::Point;
130+
/// use geo_types::{Point, PointTZM};
131131
///
132132
/// #[derive(serde::Deserialize)]
133133
/// struct MyType {
@@ -137,7 +137,7 @@ where
137137
///
138138
/// let json = r#"{ "geometry": "POINT (3.14 42)" }"#;
139139
/// let my_type: MyType = serde_json::from_str(json).unwrap();
140-
/// assert!(matches!(my_type.geometry, Some(Point(_))));
140+
/// assert!(matches!(my_type.geometry, Some(PointTZM(_))));
141141
///
142142
/// let json = r#"{ "geometry": "POINT EMPTY" }"#;
143143
/// let my_type: MyType = serde_json::from_str(json).unwrap();
@@ -156,7 +156,7 @@ where
156156
geo_types::Geometry::try_from(wkt)
157157
.map_err(D::Error::custom)
158158
.and_then(|geom| {
159-
use geo_types::Geometry::*;
159+
use geo_types::GeometryTZM::*;
160160
match geom {
161161
Point(p) => Ok(Some(p)),
162162
MultiPoint(mp) if mp.0.is_empty() => Ok(None),

src/towkt.rs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ fn g_linestring_to_w_linestring<T>(g_linestring: &geo_types::LineString<T>) -> L
6666
where
6767
T: CoordFloat,
6868
{
69-
let &geo_types::LineString(ref g_points) = g_linestring;
70-
g_points_to_w_linestring(g_points)
69+
g_points_to_w_linestring(&g_linestring.0)
7170
}
7271

7372
fn g_points_to_w_linestring<T>(g_coords: &[geo_types::Coordinate<T>]) -> LineString<T>
@@ -84,8 +83,7 @@ where
8483
{
8584
let mut w_lines = vec![];
8685
for g_line in g_lines {
87-
let &geo_types::LineString(ref g_points) = g_line;
88-
w_lines.push(g_points_to_w_linestring(g_points));
86+
w_lines.push(g_points_to_w_linestring(&g_line.0));
8987
}
9088
w_lines
9189
}
@@ -115,7 +113,7 @@ where
115113
let mut poly_lines = vec![];
116114

117115
// Outer
118-
let &geo_types::LineString(ref outer_points) = outer_line;
116+
let outer_points = &outer_line.0;
119117
if !outer_points.is_empty() {
120118
poly_lines.push(g_points_to_w_linestring(outer_points));
121119
}
@@ -131,17 +129,15 @@ fn g_mpoint_to_w_mpoint<T>(g_mpoint: &geo_types::MultiPoint<T>) -> MultiPoint<T>
131129
where
132130
T: CoordFloat,
133131
{
134-
let &geo_types::MultiPoint(ref g_points) = g_mpoint;
135-
let w_points = g_points_to_w_points(g_points);
132+
let w_points = g_points_to_w_points(&g_mpoint.0);
136133
MultiPoint(w_points)
137134
}
138135

139136
fn g_mline_to_w_mline<T>(g_mline: &geo_types::MultiLineString<T>) -> MultiLineString<T>
140137
where
141138
T: CoordFloat,
142139
{
143-
let &geo_types::MultiLineString(ref g_lines) = g_mline;
144-
let w_lines = g_lines_to_w_lines(g_lines);
140+
let w_lines = g_lines_to_w_lines(&g_mline.0);
145141
MultiLineString(w_lines)
146142
}
147143

@@ -160,18 +156,16 @@ fn g_mpolygon_to_w_mpolygon<T>(g_mpolygon: &geo_types::MultiPolygon<T>) -> Multi
160156
where
161157
T: CoordFloat,
162158
{
163-
let &geo_types::MultiPolygon(ref g_polygons) = g_mpolygon;
164-
let w_polygons = g_polygons_to_w_polygons(g_polygons);
159+
let w_polygons = g_polygons_to_w_polygons(&g_mpolygon.0);
165160
MultiPolygon(w_polygons)
166161
}
167162

168163
fn g_geocol_to_w_geocol<T>(g_geocol: &geo_types::GeometryCollection<T>) -> GeometryCollection<T>
169164
where
170165
T: CoordFloat,
171166
{
172-
let &geo_types::GeometryCollection(ref g_geoms) = g_geocol;
173167
let mut w_geoms = vec![];
174-
for g_geom in g_geoms {
168+
for g_geom in g_geocol.iter() {
175169
let w_geom = g_geom_to_w_geom(g_geom);
176170
w_geoms.push(w_geom);
177171
}

0 commit comments

Comments
 (0)