You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:51:07