diff options
author | Trygve Aaberge <trygveaa@gmail.com> | 2020-02-27 12:22:51 +0100 |
---|---|---|
committer | Trygve Aaberge <trygveaa@gmail.com> | 2020-02-27 12:24:52 +0100 |
commit | 06813f3ee5fb509a31c6bec02e0b2a7ec604a5d9 (patch) | |
tree | f4f97d6c4974f4a3212674b8c10d85b50c06b954 | |
parent | 8066aa12e989065804eb944e398e14acc4adf735 (diff) | |
download | geojson-jackson-06813f3ee5fb509a31c6bec02e0b2a7ec604a5d9.tar.gz |
Replace exterior ring in setExteriorRing if it exists
If a Polygon already has an exterior ring and setExteriorRing is called,
it would previously add the new ring to the start of the coordinates
list, so the existing exterior ring becomes an interior ring.
-rw-r--r-- | src/main/java/org/geojson/Polygon.java | 6 | ||||
-rw-r--r-- | src/test/java/org/geojson/jackson/PolygonTest.java | 18 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/main/java/org/geojson/Polygon.java b/src/main/java/org/geojson/Polygon.java index b3649e8..d4c42af 100644 --- a/src/main/java/org/geojson/Polygon.java +++ b/src/main/java/org/geojson/Polygon.java @@ -19,7 +19,11 @@ public class Polygon extends Geometry<List<LngLatAlt>> { } public void setExteriorRing(List<LngLatAlt> points) { - coordinates.add(0, points); + if (coordinates.isEmpty()) { + coordinates.add(0, points); + } else { + coordinates.set(0, points); + } } @JsonIgnore diff --git a/src/test/java/org/geojson/jackson/PolygonTest.java b/src/test/java/org/geojson/jackson/PolygonTest.java index ef06fdf..6298483 100644 --- a/src/test/java/org/geojson/jackson/PolygonTest.java +++ b/src/test/java/org/geojson/jackson/PolygonTest.java @@ -5,6 +5,8 @@ import org.geojson.LngLatAlt; import org.geojson.Polygon; import org.junit.Test; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import static org.junit.Assert.assertEquals; @@ -46,6 +48,22 @@ public class PolygonTest { assertListEquals(MockData.INTERNAL, polygon.getInteriorRings().get(0)); } + @Test + public void itShouldSetExteriorRing() throws Exception { + Polygon polygon = new Polygon(); + polygon.setExteriorRing(MockData.EXTERNAL); + assertEquals(MockData.EXTERNAL, polygon.getExteriorRing()); + } + + @Test + public void itShouldReplaceExteriorRing() throws Exception { + Polygon polygon = new Polygon(Arrays.asList( + new LngLatAlt(0, 0), new LngLatAlt(1, 0), new LngLatAlt(1, 1), new LngLatAlt(0, 1), new LngLatAlt(0, 0))); + polygon.setExteriorRing(MockData.EXTERNAL); + assertEquals(MockData.EXTERNAL, polygon.getExteriorRing()); + assertEquals(0, polygon.getInteriorRings().size()); + } + private void assertListEquals(List<LngLatAlt> expectedList, List<LngLatAlt> actualList) { for (int x = 0; x < actualList.size(); x++) { LngLatAlt expected = expectedList.get(x); |