Skip to content

Commit

Permalink
Merge pull request #190 from planetlabs/no-geometry
Browse files Browse the repository at this point in the history
Allow empty and null geometries in validation
  • Loading branch information
tschaub authored Jun 20, 2024
2 parents 36edb48 + aea265d commit 89211fa
Show file tree
Hide file tree
Showing 9 changed files with 404 additions and 43 deletions.
3 changes: 3 additions & 0 deletions internal/geo/geo.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,9 @@ func DecodeGeometry(value any, encoding string) (*orbjson.Geometry, error) {
if !ok {
return nil, fmt.Errorf("expected bytes for wkb geometry, got %T", value)
}
if len(data) == 0 {
return nil, nil
}
g, err := wkb.Unmarshal(data)
if err != nil {
return nil, err
Expand Down
42 changes: 21 additions & 21 deletions internal/validator/testdata/bad-bbox-type/expected.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,59 +47,59 @@
},
{
"title": "optional \"orientation\" must be a valid string",
"passed": true,
"run": true
"run": true,
"passed": true
},
{
"title": "optional \"edges\" must be a valid string",
"passed": true,
"run": true
"run": true,
"passed": true
},
{
"title": "optional \"bbox\" must be an array of 4 or 6 numbers",
"passed": false,
"run": true,
"passed": false,
"message": "expected \"bbox\" for column \"geometry\" to be a list, got a string: \"bogus\""
},
{
"title": "optional \"epoch\" must be a number",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must not be grouped",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must be stored using the BYTE_ARRAY parquet type",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must be required or optional, not repeated",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometry values match the \"encoding\" metadata",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometry types must be included in the \"geometry_types\" metadata (if not empty)",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all polygon geometries must follow the \"orientation\" metadata (if present)",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometries must fall within the \"bbox\" metadata (if present)",
"passed": false,
"run": false
"run": false,
"passed": false
}
],
"metadataOnly": false
Expand Down
44 changes: 22 additions & 22 deletions internal/validator/testdata/bad-crs-type/expected.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,58 +48,58 @@
},
{
"title": "optional \"orientation\" must be a valid string",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "optional \"edges\" must be a valid string",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "optional \"bbox\" must be an array of 4 or 6 numbers",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "optional \"epoch\" must be a number",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must not be grouped",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must be stored using the BYTE_ARRAY parquet type",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must be required or optional, not repeated",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometry values match the \"encoding\" metadata",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometry types must be included in the \"geometry_types\" metadata (if not empty)",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all polygon geometries must follow the \"orientation\" metadata (if present)",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometries must fall within the \"bbox\" metadata (if present)",
"passed": false,
"run": false
"run": false,
"passed": false
}
],
"metadataOnly": false
Expand Down
105 changes: 105 additions & 0 deletions internal/validator/testdata/with-empty-geometry/expected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
{
"checks": [
{
"title": "file must include a \"geo\" metadata key",
"run": true,
"passed": true
},
{
"title": "metadata must be a JSON object",
"run": true,
"passed": true
},
{
"title": "metadata must include a \"version\" string",
"run": true,
"passed": true
},
{
"title": "metadata must include a \"primary_column\" string",
"run": true,
"passed": true
},
{
"title": "metadata must include a \"columns\" object",
"run": true,
"passed": true
},
{
"title": "column metadata must include the \"primary_column\" name",
"run": true,
"passed": true
},
{
"title": "column metadata must include a valid \"encoding\" string",
"run": true,
"passed": true
},
{
"title": "column metadata must include a \"geometry_types\" list",
"run": true,
"passed": true
},
{
"title": "optional \"crs\" must be null or a PROJJSON object",
"run": true,
"passed": true
},
{
"title": "optional \"orientation\" must be a valid string",
"run": true,
"passed": true
},
{
"title": "optional \"edges\" must be a valid string",
"run": true,
"passed": true
},
{
"title": "optional \"bbox\" must be an array of 4 or 6 numbers",
"run": true,
"passed": true
},
{
"title": "optional \"epoch\" must be a number",
"run": true,
"passed": true
},
{
"title": "geometry columns must not be grouped",
"run": true,
"passed": true
},
{
"title": "geometry columns must be stored using the BYTE_ARRAY parquet type",
"run": true,
"passed": true
},
{
"title": "geometry columns must be required or optional, not repeated",
"run": true,
"passed": true
},
{
"title": "all geometry values match the \"encoding\" metadata",
"run": true,
"passed": true
},
{
"title": "all geometry types must be included in the \"geometry_types\" metadata (if not empty)",
"run": true,
"passed": true
},
{
"title": "all polygon geometries must follow the \"orientation\" metadata (if present)",
"run": true,
"passed": true
},
{
"title": "all geometries must fall within the \"bbox\" metadata (if present)",
"run": true,
"passed": true
}
],
"metadataOnly": false
}
37 changes: 37 additions & 0 deletions internal/validator/testdata/with-empty-geometry/input.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"metadata": {
"version": "1.0.0",
"primary_column": "geometry",
"columns": {
"geometry": {
"encoding": "WKB",
"geometry_types": ["Point"]
}
}
},
"data": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"name": "with geometry"
},
"geometry": {
"type": "Point",
"coordinates": [0, 0]
}
},
{
"type": "Feature",
"properties": {
"name": "empty geometry"
},
"geometry": {
"type": "Point",
"coordinates": []
}
}
]
}
}
Loading

0 comments on commit 89211fa

Please sign in to comment.