An open API service indexing awesome lists of open source software.

https://github.com/jericks/wkg

Well Known Geometry
https://github.com/jericks/wkg

antlr geometry geospatial java wkt

Last synced: about 1 month ago
JSON representation

Well Known Geometry

Awesome Lists containing this project

README

          

[![Github Action](https://github.com/jericks/wkg/actions/workflows/build.yml/badge.svg)](https://github.com/jericks/wkg/actions/workflows/build.yml)

Well Known Geometry
===================
Well Known Geometry (WKG) is a Java Library that reads and writes Geometries to and from well known text (WKT) and well known binary (WKB).

It does not use the Java Topology Suite (JTS) because it supports Geometry types that JTS does not yet support.

It can parse EWKT or WKT with a spatial reference system identifier.

It can parse Geometry with XY, XYZ, XYM, or XYZM coordinates.

It can read and write WKB and [EWKB](http://lists.osgeo.org/pipermail/postgis-devel/2004-December/000710.html).

Example Geometries in WKT:

POINT (1 1)

POINT Z (1 2 3)

POINT M (1 2 3)

POINT ZM (1 2 3 4)

SRID=4326;POINT (1 1)

LINESTRING (101 234,345 567)

POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))

MULTIPOINT (10 40, 40 30, 20 20, 30 10)

MULTIPOINT ((10 40), (40 30), (20 20), (30 10))

MULTILINESTRING ((0.0 0.0, 1.0 1.0, 1.0 2.0), (2.0 3.0, 3.0 2.0, 5.0 4.0))

MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), ((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20)))

GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))

CIRCULARSTRING (1.0 1.0, 5.0 5.0, 2.0 2.0)

COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))

CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1))

MULTICURVE ((5.0 5.0, 3.0 5.0, 3.0 3.0, 0.0 3.0), CIRCULARSTRING (0.0 0.0, 2.0 1.0, 2.0 2.0))

MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)),((10 10, 14 12, 11 10, 10 10),(11 11, 11.5 11, 11 11.5, 11 11)))

POLYHEDRALSURFACE (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20)))

TIN (((0 0, 1 0, 0 1, 0 0)), ((0 0, 0 1, 1 1, 0 0)))

TRIANGLE ((0.0 0.0, 0.0 1.0, 1.0 1.0, 0.0 0.0))

Use
---
You can use the **org.cugos.wkg.WTKReader** to read Geometry from a WKT string.

```java
import org.cugos.wkg.WKTReader;
import org.cugos.wkg.Point;

String wkt = "POINT (1.0 2.0)";
WKTReader reader = new WKTReader();
Point point = (Point) reader.read(wkt);
```

Once you have parse a WKT String into a **org.cugos.wkg.Geometry** you can write it back to WKT using the **org.cugos.wkg.WKTWriter**.

```java
import org.cugos.wkg.WKTWriter;
import org.cugos.wkg.Coordinate;
import org.cugos.wkg.Dimension;
import org.cugos.wkg.CircularString;

WKTWriter writer = new WKTWriter();
CircularString cs = new CircularString(Arrays.asList(
Coordinate.create2D(1, 1),
Coordinate.create2D(5, 5),
Coordinate.create2D(2, 2)),
Dimension.Two)
)
String wkt = writer.write(cs);
```
You can also read and write WKB and EWKB.

```java
import org.cugos.wkg.WKTReader;
import org.cugos.wkg.Geometry;

import org.cugos.wkg.WKBWriter;
import org.cugos.wkg.WKBReader;
import org.cugos.wkg.WKB.Endian;
import org.cugos.wkg.WKB.Type;

WKTReader reader = new WKTReader();
Geometry geometry = reader.read("POINT (2 4)");

WKBWriter writer = new WKBWriter(Type.WKB, Endian.Big);
byte[] wkb = wkb.write(geometry);

WKBReader wkbReader = new WKBReader();
Geometry point = wkb.read(wkb);
```

You can also read and write GeoJSON.

```java
import org.cugos.wkg.GeoJSONReader;
import org.cugos.wkg.GeoJSONWriter;
import org.cugos.wkg.Geometry;

GeoJSONReader reader = new GeoJSONReader();
Geometry point = reader.read("{\"type\": \"Point\", \"coordinates\": [122.34, -43.56]}");

GeoJSONWriter writer = new GeoJSONWriter();
String geoJSON = writer.write(point);
```

Licence
-------
Well Known Geometry is open source and licensed under the MIT License.