Java项目中借助GeoTools验证JSON输入地理坐标点的方法咨询
JSON地理坐标点验证实现方案(结合GeoTools)
一、语法合法性验证
先确保上传的JSON结构符合地理坐标约定格式(比如常见的[经度, 纬度]数组结构,或包含lon/lat字段的对象),可通过Jackson/Gson等JSON库完成基础解析校验:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public boolean validateJsonSyntax(String jsonContent) { ObjectMapper mapper = new ObjectMapper(); try { JsonNode root = mapper.readTree(jsonContent); // 校验[lon, lat]数组格式 if (root.isArray() && root.size() == 2) { return root.get(0).isNumber() && root.get(1).isNumber(); } // 校验含lon/lat字段的对象格式 if (root.isObject()) { return root.has("lon") && root.get("lon").isNumber() && root.has("lat") && root.get("lat").isNumber(); } return false; } catch (Exception e) { // JSON解析失败,语法不合法 return false; } }
二、坐标合理性验证
利用GeoTools依赖的JTS(Java Topology Suite)工具完成坐标范围校验、几何有效性校验:
1. 基础坐标范围校验
针对WGS84坐标系(常用GPS坐标),直接校验经度(-180180)、纬度(-9090)的取值范围:
import org.locationtech.jts.geom.Coordinate; public boolean validateCoordinateRange(double lon, double lat) { return lon >= -180 && lon <= 180 && lat >= -90 && lat <= 90; }
2. 几何有效性校验
将坐标转换为JTS的Point对象,通过几何验证工具检查是否为合法几何:
import org.geotools.geometry.jts.JTSFactoryFinder; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.Point; import org.locationtech.jts.geom.util.GeometryValidator; public boolean validateGeometryValidity(double lon, double lat) { GeometryFactory factory = JTSFactoryFinder.getGeometryFactory(); Point point = factory.createPoint(new Coordinate(lon, lat)); // 验证几何无自相交、坐标逻辑有效等 return GeometryValidator.isValid(point); }
三、组合验证流程
将语法校验与坐标校验结合,完整处理用户上传的JSON:
public boolean validateGeoJson(String jsonContent) { // 1. 语法校验 if (!validateJsonSyntax(jsonContent)) { return false; } // 2. 提取坐标值 ObjectMapper mapper = new ObjectMapper(); double lon, lat; try { JsonNode root = mapper.readTree(jsonContent); if (root.isArray()) { lon = root.get(0).asDouble(); lat = root.get(1).asDouble(); } else { lon = root.get("lon").asDouble(); lat = root.get("lat").asDouble(); } } catch (Exception e) { return false; } // 3. 坐标合理性校验 return validateCoordinateRange(lon, lat) && validateGeometryValidity(lon, lat); }
内容的提问来源于stack exchange,提问作者Gaetan
相关产品推荐
相关产品推荐

