From 08ddfad4530a014094c06fe68b8c2d9a0753403a Mon Sep 17 00:00:00 2001
From: linwei <872216696@qq.com>
Date: Wed, 05 Aug 2026 14:09:29 +0800
Subject: [PATCH] fix(gd): 修复线索事件查询中的SQL语法错误

---
 drone-service/drone-gd/src/main/java/org/sxkj/gd/config/GeometryTypeHandler.java |   40 ++++++++++++++++++++++++++++++----------
 1 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/config/GeometryTypeHandler.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/config/GeometryTypeHandler.java
index 0d46756..441d684 100644
--- a/drone-service/drone-gd/src/main/java/org/sxkj/gd/config/GeometryTypeHandler.java
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/config/GeometryTypeHandler.java
@@ -28,21 +28,41 @@
 
 		Geometry geo = null;
 		try {
-			// String转Geometry
-			geo = new WKTReader(new GeometryFactory(new PrecisionModel())).read(s);
-			// Geometry转WKB
-			byte[] geometryBytes = new WKBWriter(2, ByteOrderValues.LITTLE_ENDIAN, false).write(geo);
-			// 设置SRID为mysql默认的 0
-			byte[] wkb = new byte[geometryBytes.length + 4];
-			wkb[0] = wkb[1] = wkb[2] = wkb[3] = 0;
-			System.arraycopy(geometryBytes, 0, wkb, 4, geometryBytes.length);
-			preparedStatement.setBytes(i, wkb);
-		} catch (ParseException e) {
+			// 解析SRID(如果字符串包含SRID=4326;前缀)
+			int srid = 4326; // 默认使用WGS84坐标系
+			String wktString = s;
+			if (s != null && s.toUpperCase().startsWith("SRID=")) {
+				int semicolonIndex = s.indexOf(';');
+				if (semicolonIndex > 0) {
+					try {
+						srid = Integer.parseInt(s.substring(5, semicolonIndex));
+						wktString = s.substring(semicolonIndex + 1);
+					} catch (NumberFormatException e) {
+						// 如果解析失败,使用默认SRID 4326
+					}
+				}
+			}
 
+			// 清理WKT字符串:移除多余空格,标准化格式
+			// 将 "POLYGON ((" 转换为 "POLYGON(("
+			wktString = wktString.replaceAll("\\(\\s+\\(", "((").trim();
+
+			// String转Geometry
+			geo = new WKTReader(new GeometryFactory(new PrecisionModel())).read(wktString);
+
+			// 设置Geometry的SRID
+			geo.setSRID(srid);
+
+			// Geometry转WKB
+			byte[] geometryBytes = new WKBWriter(2, ByteOrderValues.LITTLE_ENDIAN, true).write(geo);
+			preparedStatement.setBytes(i, geometryBytes);
+		} catch (ParseException e) {
+			throw new SQLException("Failed to parse geometry WKT: " + s, e);
 		}
 	}
 
 
+
 	@Override
 	public String getNullableResult(ResultSet resultSet, String s) {
 		try (InputStream inputStream = resultSet.getBinaryStream(s)) {

--
Gitblit v1.9.3