]>
git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.geo/src/org/argeo/app/geo/GeoJSon.java
1 package org
.argeo
.app
.geo
;
3 import org
.locationtech
.jts
.geom
.Coordinate
;
4 import org
.locationtech
.jts
.geom
.Envelope
;
5 import org
.locationtech
.jts
.geom
.Geometry
;
6 import org
.locationtech
.jts
.geom
.LineString
;
7 import org
.locationtech
.jts
.geom
.LinearRing
;
8 import org
.locationtech
.jts
.geom
.Point
;
9 import org
.locationtech
.jts
.geom
.Polygon
;
11 import jakarta
.json
.stream
.JsonGenerator
;
16 * @see https://datatracker.ietf.org/doc/html/rfc7946
18 public class GeoJSon
{
19 public static void writeBBox(JsonGenerator generator
, Geometry geometry
) {
20 generator
.writeStartArray("bbox");
21 Envelope envelope
= geometry
.getEnvelopeInternal();
22 generator
.write(envelope
.getMinX());
23 generator
.write(envelope
.getMinY());
24 generator
.write(envelope
.getMaxX());
25 generator
.write(envelope
.getMaxY());
29 public static void writeGeometry(JsonGenerator generator
, Geometry geometry
) {
30 generator
.writeStartObject("geometry");
31 if (geometry
instanceof Point point
) {
32 generator
.write("type", "Point");
33 generator
.writeStartArray("coordinates");
34 writeCoordinate(generator
, point
.getCoordinate());
35 generator
.writeEnd();// coordinates array
36 } else if (geometry
instanceof LineString lineString
) {
37 generator
.write("type", "LineString");
38 generator
.writeStartArray("coordinates");
39 writeCoordinates(generator
, lineString
.getCoordinates());
40 generator
.writeEnd();// coordinates array
41 } else if (geometry
instanceof Polygon polygon
) {
42 generator
.write("type", "Polygon");
43 generator
.writeStartArray("coordinates");
44 LinearRing exteriorRing
= polygon
.getExteriorRing();
45 generator
.writeStartArray();
46 writeCoordinates(generator
, exteriorRing
.getCoordinates());
48 for (int i
= 0; i
< polygon
.getNumInteriorRing(); i
++) {
49 LinearRing interiorRing
= polygon
.getInteriorRingN(i
);
50 // TODO verify that holes are clockwise
51 generator
.writeStartArray();
52 writeCoordinates(generator
, interiorRing
.getCoordinates());
55 generator
.writeEnd();// coordinates array
57 generator
.writeEnd();// geometry object
60 public static void writeCoordinates(JsonGenerator generator
, Coordinate
[] coordinates
) {
61 for (Coordinate coordinate
: coordinates
) {
62 generator
.writeStartArray();
63 writeCoordinate(generator
, coordinate
);
68 public static void writeCoordinate(JsonGenerator generator
, Coordinate coordinate
) {
69 generator
.write(coordinate
.getX());
70 generator
.write(coordinate
.getY());
71 double z
= coordinate
.getZ();
72 if (!Double
.isNaN(z
)) {