HERE SDK Android导航版:如何校验坐标有效性?
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
相关产品推荐
相关产品推荐

