Skip to content

Commit 749fea7

Browse files
authored
Merge pull request #1008 from otbutz/ewkb_parser
Load geometries as EWKB
2 parents e7e3703 + f9dc095 commit 749fea7

File tree

2 files changed

+15
-17
lines changed

2 files changed

+15
-17
lines changed

build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ dependencies {
7373
implementation 'io.javalin:javalin:6.7.0'
7474
implementation 'io.javalin:javalin-micrometer:6.7.0'
7575
implementation 'io.micrometer:micrometer-registry-prometheus:1.16.2'
76-
implementation 'net.postgis:postgis-jdbc:2025.1.1'
7776
implementation 'com.fasterxml.jackson.core:jackson-databind:2.21.0'
7877

7978
testImplementation 'com.h2database:h2:2.4.240'

src/main/java/de/komoot/photon/nominatim/PostgisDataAdapter.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
package de.komoot.photon.nominatim;
22

3-
import net.postgis.jdbc.PGgeometry;
43
import org.apache.logging.log4j.LogManager;
54
import org.apache.logging.log4j.Logger;
65
import org.jspecify.annotations.NullMarked;
76
import org.jspecify.annotations.Nullable;
87
import org.locationtech.jts.geom.Geometry;
8+
import org.locationtech.jts.geom.GeometryFactory;
9+
import org.locationtech.jts.geom.PrecisionModel;
910
import org.locationtech.jts.io.ParseException;
10-
import org.locationtech.jts.io.WKTReader;
11+
import org.locationtech.jts.io.WKBReader;
1112

1213
import java.sql.ResultSet;
1314
import java.sql.SQLException;
1415
import java.util.HashMap;
16+
import java.util.HexFormat;
1517
import java.util.Map;
1618

1719
/**
1820
* Utility functions to parse data from and create SQL for PostgreSQL/PostGIS.
1921
*/
2022
@NullMarked
2123
public 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

Comments
 (0)