aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrygve Aaberge <trygveaa@gmail.com>2020-02-27 12:22:51 +0100
committerTrygve Aaberge <trygveaa@gmail.com>2020-02-27 12:24:52 +0100
commit06813f3ee5fb509a31c6bec02e0b2a7ec604a5d9 (patch)
treef4f97d6c4974f4a3212674b8c10d85b50c06b954
parent8066aa12e989065804eb944e398e14acc4adf735 (diff)
downloadgeojson-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.java6
-rw-r--r--src/test/java/org/geojson/jackson/PolygonTest.java18
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);