Skip to content

Commit

Permalink
Allow MultiPolygon emission masks
Browse files Browse the repository at this point in the history
  • Loading branch information
ctessum committed Oct 14, 2020
1 parent 8ec7140 commit 4313cb7
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 15 deletions.
11 changes: 10 additions & 1 deletion inmaputil/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,16 @@ func parseMask(maskGeoJSONFile string) (geom.Polygon, error) {
if err != nil {
return nil, fmt.Errorf("decoding EmissionMaskGEOJSON: %w", err)
}
mask = j.(geom.Polygon)
switch msk := j.(type) {
case geom.Polygon:
mask = msk
case geom.MultiPolygon:
for _, p := range msk {
mask = append(mask, p...)
}
default:
return nil, fmt.Errorf("invalid emission mask geometry type %T", j)
}
}
return mask, nil
}
50 changes: 36 additions & 14 deletions inmaputil/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,40 @@ import (
)

func TestParseMask(t *testing.T) {
f, err := os.Create("tmp_mask.json")
if err != nil {
t.Fatal(err)
}
defer os.Remove("tmp_mask.json")
fmt.Fprint(f, `{"type": "Polygon","coordinates": [ [ [1, 1], [1, 1], [1, 1], [1, 1] ] ] }`)
mask, err := parseMask("tmp_mask.json")
if err != nil {
t.Fatal(err)
}
want := geom.Polygon{geom.Path{geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}}}
if !reflect.DeepEqual(mask, want) {
t.Errorf("%v != %v", mask, want)
}
t.Run("polygon", func(t *testing.T) {
f, err := os.Create("tmp_mask.json")
if err != nil {
t.Fatal(err)
}
defer os.Remove("tmp_mask.json")
fmt.Fprint(f, `{"type": "Polygon","coordinates": [ [ [1, 1], [1, 1], [1, 1], [1, 1] ] ] }`)
mask, err := parseMask("tmp_mask.json")
if err != nil {
t.Fatal(err)
}
want := geom.Polygon{geom.Path{geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}}}
if !reflect.DeepEqual(mask, want) {
t.Errorf("%v != %v", mask, want)
}
})
t.Run("multipolygon", func(t *testing.T) {
f, err := os.Create("tmp_mask.json")
if err != nil {
t.Fatal(err)
}
defer os.Remove("tmp_mask.json")
fmt.Fprint(f, `{"type": "MultiPolygon","coordinates": [ [ [ [1, 1], [1, 1], [1, 1], [1, 1] ] ], [ [ [1, 1], [1, 1], [1, 1], [1, 1] ] ] ] }`)
mask, err := parseMask("tmp_mask.json")
if err != nil {
t.Fatal(err)
}
want := geom.Polygon{
geom.Path{geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}},
geom.Path{geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}, geom.Point{X: 1, Y: 1}},
}
if !reflect.DeepEqual(mask, want) {
t.Errorf("%v != %v", mask, want)
}
})

}

0 comments on commit 4313cb7

Please sign in to comment.