Skip to content

Commit

Permalink
Fix writing recursive geometry collections
Browse files Browse the repository at this point in the history
  • Loading branch information
kylebarron committed Nov 5, 2024
1 parent fce5de0 commit 2cca0da
Show file tree
Hide file tree
Showing 8 changed files with 18 additions and 21 deletions.
11 changes: 4 additions & 7 deletions src/writer/geometry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ use crate::error::WKBResult;
use crate::writer::{
geometry_collection_wkb_size, line_string_wkb_size, multi_line_string_wkb_size,
multi_point_wkb_size, multi_polygon_wkb_size, point_wkb_size, polygon_wkb_size,
write_line_string, write_multi_line_string, write_multi_point, write_multi_polygon,
write_point, write_polygon,
write_geometry_collection, write_line_string, write_multi_line_string, write_multi_point,
write_multi_polygon, write_point, write_polygon,
};
use crate::Endianness;
use geo_traits::{GeometryTrait, GeometryType};
Expand All @@ -28,7 +28,7 @@ pub fn geometry_wkb_size(geom: &impl GeometryTrait) -> usize {

/// Write a Geometry to a Writer encoded as WKB
pub fn write_geometry<W: Write>(
writer: W,
writer: &mut W,
geom: &impl GeometryTrait<T = f64>,
endianness: Endianness,
) -> WKBResult<()> {
Expand All @@ -40,10 +40,7 @@ pub fn write_geometry<W: Write>(
MultiPoint(mp) => write_multi_point(writer, mp, endianness),
MultiLineString(ml) => write_multi_line_string(writer, ml, endianness),
MultiPolygon(mp) => write_multi_polygon(writer, mp, endianness),
GeometryCollection(_gc) => {
todo!()
// write_geometry_collection(writer, gc, endianness),
}
GeometryCollection(gc) => write_geometry_collection(writer, gc, endianness),
Rect(_) => todo!(),
Triangle(_) => todo!(),
Line(_) => todo!(),
Expand Down
4 changes: 2 additions & 2 deletions src/writer/geometrycollection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ pub fn geometry_collection_wkb_size(geom: &impl GeometryCollectionTrait) -> usiz

/// Write a GeometryCollection geometry to a Writer encoded as WKB
pub fn write_geometry_collection<W: Write>(
mut writer: W,
writer: &mut W,
geom: &impl GeometryCollectionTrait<T = f64>,
endianness: Endianness,
) -> WKBResult<()> {
Expand All @@ -42,7 +42,7 @@ pub fn write_geometry_collection<W: Write>(
writer.write_u32::<LittleEndian>(geom.num_geometries().try_into().unwrap())?;

for inner_geom in geom.geometries() {
write_geometry(&mut writer, &inner_geom, endianness)?;
write_geometry(writer, &inner_geom, endianness)?;
}

Ok(())
Expand Down
4 changes: 2 additions & 2 deletions src/writer/linestring.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub fn line_string_wkb_size(geom: &impl LineStringTrait) -> usize {

/// Write a LineString geometry to a Writer encoded as WKB
pub fn write_line_string<W: Write>(
mut writer: W,
writer: &mut W,
geom: &impl LineStringTrait<T = f64>,
endianness: Endianness,
) -> WKBResult<()> {
Expand All @@ -30,7 +30,7 @@ pub fn write_line_string<W: Write>(
}

fn write_line_string_content<W: Write, B: ByteOrder>(
mut writer: W,
writer: &mut W,
geom: &impl LineStringTrait<T = f64>,
) -> WKBResult<()> {
use geo_traits::Dimensions;
Expand Down
4 changes: 2 additions & 2 deletions src/writer/multilinestring.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ pub fn multi_line_string_wkb_size(geom: &impl MultiLineStringTrait) -> usize {

/// Write a MultiLineString geometry to a Writer encoded as WKB
pub fn write_multi_line_string<W: Write>(
mut writer: W,
writer: &mut W,
geom: &impl MultiLineStringTrait<T = f64>,
endianness: Endianness,
) -> WKBResult<()> {
Expand All @@ -41,7 +41,7 @@ pub fn write_multi_line_string<W: Write>(
writer.write_u32::<LittleEndian>(geom.num_line_strings().try_into().unwrap())?;

for line_string in geom.line_strings() {
write_line_string(&mut writer, &line_string, endianness)?;
write_line_string(writer, &line_string, endianness)?;
}

Ok(())
Expand Down
4 changes: 2 additions & 2 deletions src/writer/multipoint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ pub fn multi_point_wkb_size(geom: &impl MultiPointTrait) -> usize {

/// Write a MultiPoint geometry to a Writer encoded as WKB
pub fn write_multi_point<W: Write>(
mut writer: W,
writer: &mut W,
geom: &impl MultiPointTrait<T = f64>,
endianness: Endianness,
) -> WKBResult<()> {
Expand All @@ -36,7 +36,7 @@ pub fn write_multi_point<W: Write>(
writer.write_u32::<LittleEndian>(geom.num_points().try_into().unwrap())?;

for point in geom.points() {
write_point(&mut writer, &point, endianness)?;
write_point(writer, &point, endianness)?;
}

Ok(())
Expand Down
4 changes: 2 additions & 2 deletions src/writer/multipolygon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ pub fn multi_polygon_wkb_size(geom: &impl MultiPolygonTrait) -> usize {

/// Write a MultiPolygon geometry to a Writer encoded as WKB
pub fn write_multi_polygon<W: Write>(
mut writer: W,
writer: &mut W,
geom: &impl MultiPolygonTrait<T = f64>,
endianness: Endianness,
) -> WKBResult<()> {
Expand All @@ -41,7 +41,7 @@ pub fn write_multi_polygon<W: Write>(
writer.write_u32::<LittleEndian>(geom.num_polygons().try_into().unwrap())?;

for polygon in geom.polygons() {
write_polygon(&mut writer, &polygon, endianness)?;
write_polygon(writer, &polygon, endianness)?;
}

Ok(())
Expand Down
4 changes: 2 additions & 2 deletions src/writer/point.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub fn point_wkb_size(dim: geo_traits::Dimensions) -> usize {

/// Write a Point geometry to a Writer encoded as WKB
pub fn write_point<W: Write>(
mut writer: W,
writer: &mut W,
geom: &impl PointTrait<T = f64>,
endianness: Endianness,
) -> WKBResult<()> {
Expand All @@ -31,7 +31,7 @@ pub fn write_point<W: Write>(

/// Write a Point geometry to a Writer encoded as WKB
fn write_point_content<W: Write, B: ByteOrder>(
mut writer: W,
writer: &mut W,
geom: &impl PointTrait<T = f64>,
) -> WKBResult<()> {
use geo_traits::Dimensions;
Expand Down
4 changes: 2 additions & 2 deletions src/writer/polygon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ pub fn polygon_wkb_size(geom: &impl PolygonTrait) -> usize {

/// Write a Polygon geometry to a Writer encoded as WKB
pub fn write_polygon<W: Write>(
mut writer: W,
writer: &mut W,
geom: &impl PolygonTrait<T = f64>,
endianness: Endianness,
) -> WKBResult<()> {
Expand All @@ -39,7 +39,7 @@ pub fn write_polygon<W: Write>(
}

fn write_polygon_content<W: Write, B: ByteOrder>(
mut writer: W,
writer: &mut W,
geom: &impl PolygonTrait<T = f64>,
) -> WKBResult<()> {
use geo_traits::Dimensions;
Expand Down

0 comments on commit 2cca0da

Please sign in to comment.