Skip to content

Commit 86f0773

Browse files
authored
Merge pull request #52 from geoscript/GSG-ISSUE49
Add geometry twkb reader
2 parents adfc3da + 497f222 commit 86f0773

File tree

4 files changed

+69
-1
lines changed

4 files changed

+69
-1
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package geoscript.geom.io
2+
3+
import geoscript.geom.Geometry
4+
import org.geotools.data.postgis.TWKBReader
5+
import org.locationtech.jts.geom.GeometryFactory
6+
import org.locationtech.jts.io.WKBReader
7+
8+
/**
9+
* Read a {@link geoscript.geom.Geometry Geometry} from a TWKB hex String or byte array.
10+
* <p><blockquote><pre>
11+
* TWkbReader reader = new TWkbReader()
12+
* {@link geoscript.geom.Point Point} pt = reader.read("01000204")
13+
*
14+
* POINT (1 2)
15+
* </pre></blockquote></p>
16+
* @author Jared Erickson
17+
*/
18+
class TWkbReader implements Reader {
19+
20+
/**
21+
* The GeoTools TWKBReader
22+
*/
23+
private final static TWKBReader reader = new TWKBReader(new GeometryFactory())
24+
25+
/**
26+
* Read a Geometry from a String
27+
* @param str The String
28+
* @return A Geometry
29+
*/
30+
Geometry read(String str) {
31+
read(WKBReader.hexToBytes(str))
32+
}
33+
34+
/**
35+
* Read a Geometry from a byte array
36+
* @param bytes The byte array
37+
* @return A Geometry
38+
*/
39+
Geometry read(byte[] bytes) {
40+
Geometry.wrap(reader.read(bytes))
41+
}
42+
43+
}

src/main/resources/META-INF/services/geoscript.geom.io.Reader

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ geoscript.geom.io.KmlReader
88
geoscript.geom.io.WkbReader
99
geoscript.geom.io.WktReader
1010
geoscript.geom.io.GeoPackageReader
11-
geoscript.geom.io.GooglePolylineEncoder
11+
geoscript.geom.io.GooglePolylineEncoder
12+
geoscript.geom.io.TWkbReader

src/test/groovy/geoscript/geom/io/ReadersTestCase.groovy

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ class ReadersTestCase {
1919
Reader reader = Readers.find("wkt")
2020
assertNotNull reader
2121

22+
reader = Readers.find("wkb")
23+
assertNotNull reader
24+
25+
reader = Readers.find("twkb")
26+
assertNotNull reader
27+
2228
reader = Readers.find("asdf")
2329
assertNull reader
2430
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package geoscript.geom.io
2+
3+
import geoscript.geom.Geometry
4+
import org.junit.Test
5+
import static org.junit.Assert.assertEquals
6+
7+
class TWkbReaderTestCase {
8+
9+
@Test
10+
void read() {
11+
TWkbReader reader = new TWkbReader()
12+
Geometry geometry = reader.read("01000204")
13+
assertEquals("POINT (1 2)", geometry.wkt)
14+
geometry = reader.read("01000204".decodeHex())
15+
assertEquals("POINT (1 2)", geometry.wkt)
16+
}
17+
18+
}

0 commit comments

Comments
 (0)