11package de .komoot .photon .nominatim ;
22
3- import net .postgis .jdbc .PGgeometry ;
43import org .apache .logging .log4j .LogManager ;
54import org .apache .logging .log4j .Logger ;
65import org .jspecify .annotations .NullMarked ;
76import org .jspecify .annotations .Nullable ;
87import org .locationtech .jts .geom .Geometry ;
8+ import org .locationtech .jts .geom .GeometryFactory ;
9+ import org .locationtech .jts .geom .PrecisionModel ;
910import org .locationtech .jts .io .ParseException ;
10- import org .locationtech .jts .io .WKTReader ;
11+ import org .locationtech .jts .io .WKBReader ;
1112
1213import java .sql .ResultSet ;
1314import java .sql .SQLException ;
1415import java .util .HashMap ;
16+ import java .util .HexFormat ;
1517import java .util .Map ;
1618
1719/**
1820 * Utility functions to parse data from and create SQL for PostgreSQL/PostGIS.
1921 */
2022@ NullMarked
2123public class PostgisDataAdapter implements DBDataAdapter {
24+ private static final GeometryFactory GEOMETRY_FACTORY = new GeometryFactory (new PrecisionModel (), 4326 );
2225 private static final Logger LOGGER = LogManager .getLogger ();
2326
2427 @ Override
@@ -34,22 +37,18 @@ public Map<String, String> getMap(ResultSet rs, String columnName) throws SQLExc
3437 @ Override
3538 @ Nullable
3639 public Geometry extractGeometry (ResultSet rs , String columnName ) throws SQLException {
37- PGgeometry wkt = (PGgeometry ) rs .getObject (columnName );
38- if (wkt != null ) {
39- try {
40- StringBuffer sb = new StringBuffer ();
41- wkt .getGeometry ().outerWKT (sb );
42-
43- Geometry geometry = new WKTReader ().read (sb .toString ());
44- geometry .setSRID (4326 );
45- return geometry ;
46- } catch (ParseException e ) {
47- // ignore
48- LOGGER .error ("Cannot parse database geometry" , e );
49- }
40+ var ewkbHex = rs .getString (columnName );
41+ if (ewkbHex == null ) {
42+ return null ;
5043 }
5144
52- return null ;
45+ try {
46+ var ewkb = HexFormat .of ().parseHex (ewkbHex );
47+ return new WKBReader (GEOMETRY_FACTORY ).read (ewkb );
48+ } catch (IllegalArgumentException | ParseException e ) {
49+ LOGGER .error ("Cannot parse database geometry: {}" , ewkbHex , e );
50+ return null ;
51+ }
5352 }
5453
5554 @ Override
0 commit comments