Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
import java.io.InvalidObjectException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.math.BigDecimal;
import java.nio.ByteBuffer;
import java.util.List;
import net.jcip.annotations.Immutable;

@Immutable
Expand Down Expand Up @@ -199,4 +201,48 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException
public String toString() {
return asWellKnownText();
}

protected static void appendPosition(StringBuilder builder, double x, double y) {
builder
.append('[')
.append(formatCoordinate(x))
.append(',')
.append(formatCoordinate(y))
.append(']');
}

protected static void appendPosition(StringBuilder builder, Point point) {
appendPosition(builder, point.X(), point.Y());
}

protected static void appendPositions(
StringBuilder builder, List<Point> points, boolean closeRing) {
builder.append('[');
for (int i = 0; i < points.size(); i++) {
if (i > 0) {
builder.append(',');
}
appendPosition(builder, points.get(i));
}
if (closeRing && !points.isEmpty()) {
Point first = points.get(0);
Point last = points.get(points.size() - 1);
if (!haveSameCoordinates(first, last)) {
builder.append(',');
appendPosition(builder, first);
}
}
builder.append(']');
}

private static boolean haveSameCoordinates(Point first, Point second) {
return Double.compare(first.X(), second.X()) == 0 && Double.compare(first.Y(), second.Y()) == 0;
}

private static String formatCoordinate(double value) {
if (!Double.isFinite(value)) {
throw new IllegalArgumentException("Coordinate values must be finite");
}
return BigDecimal.valueOf(value).toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,17 @@ public List<Point> getPoints() {
return points;
}

@NonNull
@Override
public String asGeoJson() {
int estimatedSize = Math.max(32, points.size() * 32);
StringBuilder builder = new StringBuilder(estimatedSize);
builder.append("{\"type\":\"LineString\",\"coordinates\":");
appendPositions(builder, points, false);
builder.append('}');
return builder.toString();
}

/**
* This object gets replaced by an internal proxy for serialization.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ public double Y() {
return getOgcGeometry().Y();
}

@NonNull
@Override
public String asGeoJson() {
StringBuilder builder = new StringBuilder(64);
builder.append("{\"type\":\"Point\",\"coordinates\":");
appendPosition(builder, X(), Y());
builder.append('}');
return builder.toString();
}

/**
* This object gets replaced by an internal proxy for serialization.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,24 @@ public List<List<Point>> getInteriorRings() {
return interiorRings;
}

@NonNull
@Override
public String asGeoJson() {
if (exteriorRing.isEmpty()) {
return "{\"type\":\"Polygon\",\"coordinates\":[]}";
}
int totalRings = 1 + interiorRings.size();
StringBuilder builder = new StringBuilder(Math.max(64, totalRings * 96));
builder.append("{\"type\":\"Polygon\",\"coordinates\":[");
appendPositions(builder, exteriorRing, true);
for (List<Point> ring : interiorRings) {
builder.append(',');
appendPositions(builder, ring, true);
}
builder.append("]}");
return builder.toString();
}

private static OGCPolygon fromPoints(Point p1, Point p2, Point p3, Point... pn) {
com.esri.core.geometry.Polygon polygon = new com.esri.core.geometry.Polygon();
addPath(polygon, p1, p2, p3, pn);
Expand Down
4 changes: 4 additions & 0 deletions osgi-tests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@
<groupId>com.esri.geometry</groupId>
<artifactId>esri-geometry-api</artifactId>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin-core</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
<hdrhistogram.version>2.2.2</hdrhistogram.version>
<metrics.version>4.2.37</metrics.version>
<netty.version>4.1.127.Final</netty.version>
<esri.version>1.2.1</esri.version>
<esri.version>2.2.4</esri.version>
<!--
When upgrading TinkerPop please upgrade the version matrix in
manual/core/integration/README.md
Expand Down
Loading