kafka配置、序列化warn修复
This commit is contained in:
parent
fb9787fec1
commit
61a99a6ca6
@ -13,7 +13,7 @@ spring:
|
|||||||
username: nacos
|
username: nacos
|
||||||
password: nacos
|
password: nacos
|
||||||
kafka:
|
kafka:
|
||||||
bootstrap-servers: 192.168.101.40:9092
|
bootstrap-servers: 47.109.71.130:9092
|
||||||
producer:
|
producer:
|
||||||
retries: 0
|
retries: 0
|
||||||
key-serializer: org.apache.kafka.common.serialization.StringSerializer
|
key-serializer: org.apache.kafka.common.serialization.StringSerializer
|
||||||
|
|||||||
@ -70,7 +70,7 @@ public class PointDeserializer extends JsonDeserializer<Point> {
|
|||||||
4. 坐标数组: [lng,lat]
|
4. 坐标数组: [lng,lat]
|
||||||
5. 简化格式: {"longitude":116.3974,"latitude":39.9093}
|
5. 简化格式: {"longitude":116.3974,"latitude":39.9093}
|
||||||
6. WKT字符串: "POINT(lng lat)"
|
6. WKT字符串: "POINT(lng lat)"
|
||||||
7. PostgreSQL点格式: "(lng,lat)" """);
|
7. PostgreSQL点格式: "(lng,lat)\"""");
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("!!! PointDeserializer 反序列化失败 !!!");
|
log.error("!!! PointDeserializer 反序列化失败 !!!");
|
||||||
|
|||||||
@ -14,7 +14,7 @@ spring:
|
|||||||
username: nacos
|
username: nacos
|
||||||
password: nacos
|
password: nacos
|
||||||
kafka:
|
kafka:
|
||||||
bootstrap-servers: 192.168.101.40:9092
|
bootstrap-servers: 47.109.71.130:9092
|
||||||
producer:
|
producer:
|
||||||
retries: 0
|
retries: 0
|
||||||
key-serializer: org.apache.kafka.common.serialization.StringSerializer
|
key-serializer: org.apache.kafka.common.serialization.StringSerializer
|
||||||
|
|||||||
@ -14,7 +14,7 @@ spring:
|
|||||||
date-format: yyyy-MM-dd HH:mm:ss
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
time-zone: GMT+8
|
time-zone: GMT+8
|
||||||
kafka:
|
kafka:
|
||||||
bootstrap-servers: 192.168.101.40:9092
|
bootstrap-servers: 47.109.71.130:9092
|
||||||
producer:
|
producer:
|
||||||
retries: 0
|
retries: 0
|
||||||
key-serializer: org.apache.kafka.common.serialization.StringSerializer
|
key-serializer: org.apache.kafka.common.serialization.StringSerializer
|
||||||
|
|||||||
@ -73,7 +73,7 @@ public class PointDeserializer extends JsonDeserializer<Point> {
|
|||||||
4. 坐标数组: [lng,lat]
|
4. 坐标数组: [lng,lat]
|
||||||
5. 简化格式: {"longitude":116.3974,"latitude":39.9093}
|
5. 简化格式: {"longitude":116.3974,"latitude":39.9093}
|
||||||
6. WKT字符串: "POINT(lng lat)"
|
6. WKT字符串: "POINT(lng lat)"
|
||||||
7. PostgreSQL点格式: "(lng,lat)" """);
|
7. PostgreSQL点格式: "(lng,lat)\"""");
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("!!! PointDeserializer 反序列化失败 !!!");
|
log.error("!!! PointDeserializer 反序列化失败 !!!");
|
||||||
|
|||||||
@ -9,9 +9,6 @@ import org.locationtech.jts.geom.Point;
|
|||||||
import org.locationtech.jts.io.WKTWriter;
|
import org.locationtech.jts.io.WKTWriter;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.DecimalFormat;
|
|
||||||
import java.text.DecimalFormatSymbols;
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JTS Point 序列化器 - 将 Point 序列化为 JSON
|
* JTS Point 序列化器 - 将 Point 序列化为 JSON
|
||||||
@ -20,9 +17,6 @@ import java.util.Locale;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class PointSerializer extends JsonSerializer<Point> {
|
public class PointSerializer extends JsonSerializer<Point> {
|
||||||
|
|
||||||
private static final DecimalFormat COORD_FORMAT = new DecimalFormat("#.##########",
|
|
||||||
DecimalFormatSymbols.getInstance(Locale.US));
|
|
||||||
|
|
||||||
private final WKTWriter wktWriter = new WKTWriter();
|
private final WKTWriter wktWriter = new WKTWriter();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -111,25 +105,4 @@ public class PointSerializer extends JsonSerializer<Point> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取坐标的格式化字符串(用于文本表示)
|
|
||||||
*/
|
|
||||||
private String getFormattedCoordinateString(double value) {
|
|
||||||
synchronized (COORD_FORMAT) {
|
|
||||||
return COORD_FORMAT.format(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 生成 PostgreSQL 点格式的字符串(兼容性)
|
|
||||||
*/
|
|
||||||
private String toPostgresPointFormat(Point point) {
|
|
||||||
if (point == null || point.isEmpty()) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
Coordinate coordinate = point.getCoordinate();
|
|
||||||
return "(" + getFormattedCoordinateString(coordinate.x) +
|
|
||||||
"," + getFormattedCoordinateString(coordinate.y) + ")";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -37,8 +37,6 @@ public class PolygonDeserializer extends JsonDeserializer<Polygon> {
|
|||||||
String type = node.get("type").asText().toLowerCase();
|
String type = node.get("type").asText().toLowerCase();
|
||||||
if ("polygon".equals(type)) {
|
if ("polygon".equals(type)) {
|
||||||
result = parseFromCustomFormat(node);
|
result = parseFromCustomFormat(node);
|
||||||
} else if ("polygon".equals(type)) { // GeoJSON 格式
|
|
||||||
result = parseFromGeoJSON(node);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 格式2: 直接坐标数组 [[x1,y1], [x2,y2], ...]
|
// 格式2: 直接坐标数组 [[x1,y1], [x2,y2], ...]
|
||||||
@ -61,7 +59,7 @@ public class PolygonDeserializer extends JsonDeserializer<Polygon> {
|
|||||||
2. GeoJSON格式: {"type":"Polygon","coordinates":[[[x1,y1],[x2,y2],...]]}
|
2. GeoJSON格式: {"type":"Polygon","coordinates":[[[x1,y1],[x2,y2],...]]}
|
||||||
3. 坐标数组: [[x1,y1],[x2,y2],...]
|
3. 坐标数组: [[x1,y1],[x2,y2],...]
|
||||||
4. WKT字符串: "POLYGON((x1 y1, x2 y2, ...))"
|
4. WKT字符串: "POLYGON((x1 y1, x2 y2, ...))"
|
||||||
5. PGpolygon格式: "((x1,y1),(x2,y2),...)" """);
|
5. PGpolygon格式: "((x1,y1),(x2,y2),...)\"""");
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -116,46 +114,6 @@ public class PolygonDeserializer extends JsonDeserializer<Polygon> {
|
|||||||
return createPolygonFromCoordinates(coordinates);
|
return createPolygonFromCoordinates(coordinates);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 解析 GeoJSON 格式
|
|
||||||
*/
|
|
||||||
private Polygon parseFromGeoJSON(JsonNode node) throws IOException {
|
|
||||||
JsonNode coordinatesNode = node.get("coordinates");
|
|
||||||
if (coordinatesNode == null) {
|
|
||||||
throw new IOException("coordinates 字段缺失");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!coordinatesNode.isArray() || coordinatesNode.isEmpty()) {
|
|
||||||
throw new IOException("coordinates 字段必须是非空数组");
|
|
||||||
}
|
|
||||||
|
|
||||||
// GeoJSON 格式: coordinates 是三维数组 [[[x1,y1], [x2,y2], ...]]
|
|
||||||
JsonNode firstRing = coordinatesNode.get(0);
|
|
||||||
if (!firstRing.isArray()) {
|
|
||||||
throw new IOException("GeoJSON coordinates 第一环必须是数组");
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Coordinate> coordinates = new ArrayList<>();
|
|
||||||
for (int i = 0; i < firstRing.size(); i++) {
|
|
||||||
JsonNode coordNode = firstRing.get(i);
|
|
||||||
if (!coordNode.isArray()) {
|
|
||||||
throw new IOException("GeoJSON 坐标 " + i + " 必须是数组格式");
|
|
||||||
}
|
|
||||||
if (coordNode.size() < 2) {
|
|
||||||
throw new IOException("GeoJSON 坐标 " + i + " 至少需要2个值(经度和纬度)");
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
double x = coordNode.get(0).asDouble();
|
|
||||||
double y = coordNode.get(1).asDouble();
|
|
||||||
coordinates.add(new Coordinate(x, y));
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
throw new IOException("GeoJSON 坐标 " + i + " 格式错误: " + coordNode, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return createPolygonFromCoordinates(coordinates);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析坐标数组格式
|
* 解析坐标数组格式
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -10,9 +10,6 @@ import org.locationtech.jts.geom.Polygon;
|
|||||||
import org.locationtech.jts.io.WKTWriter;
|
import org.locationtech.jts.io.WKTWriter;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.DecimalFormat;
|
|
||||||
import java.text.DecimalFormatSymbols;
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JTS Polygon 序列化器 - 将 Polygon 序列化为 JSON
|
* JTS Polygon 序列化器 - 将 Polygon 序列化为 JSON
|
||||||
@ -21,9 +18,6 @@ import java.util.Locale;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class PolygonSerializer extends JsonSerializer<Polygon> {
|
public class PolygonSerializer extends JsonSerializer<Polygon> {
|
||||||
|
|
||||||
private static final DecimalFormat COORD_FORMAT = new DecimalFormat("#.##########",
|
|
||||||
DecimalFormatSymbols.getInstance(Locale.US));
|
|
||||||
|
|
||||||
private final WKTWriter wktWriter = new WKTWriter();
|
private final WKTWriter wktWriter = new WKTWriter();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -103,7 +97,7 @@ public class PolygonSerializer extends JsonSerializer<Polygon> {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// 获取外环
|
// 获取外环
|
||||||
LinearRing exteriorRing = (LinearRing) polygon.getExteriorRing();
|
LinearRing exteriorRing = polygon.getExteriorRing();
|
||||||
if (exteriorRing == null) {
|
if (exteriorRing == null) {
|
||||||
throw new IOException("多边形外环为空");
|
throw new IOException("多边形外环为空");
|
||||||
}
|
}
|
||||||
@ -173,41 +167,4 @@ public class PolygonSerializer extends JsonSerializer<Polygon> {
|
|||||||
throw new IOException("Polygon 序列化失败", e);
|
throw new IOException("Polygon 序列化失败", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取坐标的格式化字符串
|
|
||||||
*/
|
|
||||||
private String getFormattedCoordinateString(double value) {
|
|
||||||
synchronized (COORD_FORMAT) {
|
|
||||||
return COORD_FORMAT.format(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 生成 PGpolygon 格式的字符串(兼容性)
|
|
||||||
*/
|
|
||||||
private String toPGpolygonFormat(Coordinate[] coordinates) {
|
|
||||||
if (coordinates == null || coordinates.length == 0) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append("((");
|
|
||||||
|
|
||||||
for (int i = 0; i < coordinates.length; i++) {
|
|
||||||
Coordinate coord = coordinates[i];
|
|
||||||
if (coord == null) continue;
|
|
||||||
|
|
||||||
sb.append(getFormattedCoordinateString(coord.x))
|
|
||||||
.append(",")
|
|
||||||
.append(getFormattedCoordinateString(coord.y));
|
|
||||||
|
|
||||||
if (i < coordinates.length - 1) {
|
|
||||||
sb.append("),(");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sb.append("))");
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -5,7 +5,9 @@ import com.cdzy.common.utils.CoordinateUtil;
|
|||||||
import org.apache.ibatis.type.JdbcType;
|
import org.apache.ibatis.type.JdbcType;
|
||||||
import org.apache.ibatis.type.TypeHandler;
|
import org.apache.ibatis.type.TypeHandler;
|
||||||
import org.locationtech.jts.geom.*;
|
import org.locationtech.jts.geom.*;
|
||||||
import org.locationtech.jts.io.*;
|
import org.locationtech.jts.io.ParseException;
|
||||||
|
import org.locationtech.jts.io.WKBReader;
|
||||||
|
import org.locationtech.jts.io.WKTReader;
|
||||||
import org.postgresql.util.PGobject;
|
import org.postgresql.util.PGobject;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
@ -23,9 +25,7 @@ public class PolygonTypeHandler implements TypeHandler<Polygon> {
|
|||||||
private static final int WGS84_SRID = 4326;
|
private static final int WGS84_SRID = 4326;
|
||||||
private final GeometryFactory geometryFactory = new GeometryFactory();
|
private final GeometryFactory geometryFactory = new GeometryFactory();
|
||||||
private final WKTReader wktReader = new WKTReader(geometryFactory);
|
private final WKTReader wktReader = new WKTReader(geometryFactory);
|
||||||
private final WKTWriter wktWriter = new WKTWriter();
|
|
||||||
private final WKBReader wkbReader = new WKBReader(geometryFactory);
|
private final WKBReader wkbReader = new WKBReader(geometryFactory);
|
||||||
private final WKBWriter wkbWriter = new WKBWriter();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setParameter(PreparedStatement ps, int i, Polygon parameter, JdbcType jdbcType)
|
public void setParameter(PreparedStatement ps, int i, Polygon parameter, JdbcType jdbcType)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user