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

HERE SDK Android导航版:如何校验坐标有效性?

在HERE SDK Navigate Edition中校验GeoCoordinates有效性的方法

1. 利用构造器的隐式校验

Navigate Edition的GeoCoordinates类在实例化时会自动执行基础校验:

  • 若纬度超出[-90.0, 90.0]范围,或经度超出[-180.0, 180.0]范围,构造器会抛出IllegalArgumentException
  • 传入NaN或无穷大数值时,同样会触发异常

可以通过捕获构造异常判断坐标有效性,示例代码:

// Java 示例
boolean isCoordinateValid(double lat, double lon) {
    try {
        new GeoCoordinates(lat, lon);
        return true;
    } catch (IllegalArgumentException e) {
        return false;
    }
}
// Kotlin 示例
fun isCoordinateValid(lat: Double, lon: Double): Boolean {
    return try {
        GeoCoordinates(lat, lon)
        true
    } catch (e: IllegalArgumentException) {
        false
    }
}

2. 手动实现坐标范围校验

如果不想依赖异常捕获,可自行实现核心校验逻辑,覆盖有效性规则:

  • 纬度需满足 -90.0 ≤ latitude ≤ 90.0
  • 经度需满足 -180.0 ≤ longitude ≤ 180.0
  • 坐标值不能为NaN或无穷大

示例代码:

// Java 示例
boolean isCoordinateValid(double lat, double lon) {
    return !Double.isNaN(lat) && !Double.isInfinite(lat)
            && !Double.isNaN(lon) && !Double.isInfinite(lon)
            && lat >= -90.0 && lat <= 90.0
            && lon >= -180.0 && lon <= 180.0;
}
// Kotlin 示例
fun isCoordinateValid(lat: Double, lon: Double): Boolean {
    return lat.isFinite() && lon.isFinite()
            && lat in -90.0..90.0
            && lon in -180.0..180.0
}

3. 处理非标准经度范围(可选)

若场景中存在0-360范围的经度值,可先将其转换为[-180,180]标准区间再校验:

// Java 示例
double normalizeLongitude(double lon) {
    double normalized = lon % 360.0;
    if (normalized > 180.0) {
        normalized -= 360.0;
    } else if (normalized < -180.0) {
        normalized += 360.0;
    }
    return normalized;
}

boolean isValidWithNormalization(double lat, double lon) {
    double normalizedLon = normalizeLongitude(lon);
    return isCoordinateValid(lat, normalizedLon);
}

内容的提问来源于stack exchange,提问作者Phoebe Huang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:25:39