FlatGeobuf: read files with heterogeneous geometry types [#8]

This commit is contained in:
Brandon Liu
2022-04-02 12:07:22 +08:00
parent 19241f8373
commit 7f678502af
+12 -6
View File
@@ -69,17 +69,20 @@ drawvec readLinePart(const FlatGeobuf::Geometry *geometry) {
} }
drawvec readGeometry(const FlatGeobuf::Geometry *geometry, FlatGeobuf::GeometryType h_geometry_type) { drawvec readGeometry(const FlatGeobuf::Geometry *geometry, FlatGeobuf::GeometryType h_geometry_type) {
if (h_geometry_type == FlatGeobuf::GeometryType::Point) { FlatGeobuf::GeometryType geometry_type = h_geometry_type;
if (h_geometry_type == FlatGeobuf::GeometryType::Unknown) geometry_type = geometry->type();
if (geometry_type == FlatGeobuf::GeometryType::Point) {
return readPoints(geometry); return readPoints(geometry);
} if (h_geometry_type == FlatGeobuf::GeometryType::MultiPoint) { } if (geometry_type == FlatGeobuf::GeometryType::MultiPoint) {
return readPoints(geometry); return readPoints(geometry);
} if (h_geometry_type == FlatGeobuf::GeometryType::LineString) { } if (geometry_type == FlatGeobuf::GeometryType::LineString) {
return readLinePart(geometry); return readLinePart(geometry);
} else if (h_geometry_type == FlatGeobuf::GeometryType::MultiLineString) { } else if (h_geometry_type == FlatGeobuf::GeometryType::MultiLineString) {
return readLinePart(geometry); return readLinePart(geometry);
} if (h_geometry_type == FlatGeobuf::GeometryType::Polygon) { } if (geometry_type == FlatGeobuf::GeometryType::Polygon) {
return readLinePart(geometry); return readLinePart(geometry);
} else if (h_geometry_type == FlatGeobuf::GeometryType::MultiPolygon) { } else if (geometry_type == FlatGeobuf::GeometryType::MultiPolygon) {
// if it is a GeometryCollection, parse Parts, ignore XY // if it is a GeometryCollection, parse Parts, ignore XY
drawvec dv; drawvec dv;
for (size_t part = 0; part < geometry->parts()->size(); part++) { for (size_t part = 0; part < geometry->parts()->size(); part++) {
@@ -101,7 +104,10 @@ void readFeature(const FlatGeobuf::Feature *feature, long long feature_sequence_
int drawvec_type = -1; int drawvec_type = -1;
switch (h_geometry_type) { FlatGeobuf::GeometryType geometry_type = h_geometry_type;
if (h_geometry_type == FlatGeobuf::GeometryType::Unknown) geometry_type = feature->geometry()->type();
switch (geometry_type) {
case FlatGeobuf::GeometryType::Point : case FlatGeobuf::GeometryType::Point :
case FlatGeobuf::GeometryType::MultiPoint : case FlatGeobuf::GeometryType::MultiPoint :
drawvec_type = 1; drawvec_type = 1;