地球上经纬度变化1度是多少距离

本文详细解析了地球表面经度和纬度变化1度对应的实际距离计算方法。通过简化地球为正圆模型,推导出经线上变化1纬度约为111.11公里,以及在不同纬度下,变化1经度的距离与该纬度的余弦值成正比的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把地球看做一个正圆,左边的圆表示在经线上变化1纬度,对应到地球表面的弧长;右边的圆表示在纬线上变化1经度,对应到地球表面的弧长。需要注意的是,左边的圆,无论经度如何变化,1纬度对应的弧度是固定的;右边的圆,在低纬度的时候,1经度对应的弧度比高纬度的时候要大。

所以根据上面的分析,这个问题应该分为两个问题考虑:

1、在经线上,变化1纬度是多少距离

为了简便计算,我们把赤道长度看做地球这个圆的周长,周长R = 40000 km

以北半球为例,北半球的纬度是0° - 90°,北半球的弧长是 40000 / 4 = 10000 km

因此纬度变化1°,对应的距离 L = 10000 / 90 ≈ 111.11 km

2、在纬线上,变化1经度是多少距离

虽然在纬线上,不同纬度变化1经度对应的距离是不一样的,但根据上面的计算方法,只需要算出不同纬度对应地球切面这个圆的周长,就可以得到不同纬度下变化1经度对应的距离。

 

图2

根据图2,只要能够得到指定纬度θ所切的圆的半径 r' ,就可以得到在这个纬度θ上所切的圆的周长:R' = 2πr' ,纬度θ上变化 1经度的距离 L = R' / 360

根据三角函数可以得到 cosθ = r' / r ,因此 r' = r * cosθ

地球周长R = 40000 km,地球半径 r = 40000 / 2π km,r' = 40000 / 2π * cosθ km

因此根据上面的推论,在纬度θ所切圆的周长 R' = 2πr' =  40000 * cosθ km

纬度θ的纬线上变化 1经度的距离 L = R' / 360 ≈ 111.11 * cosθ km

结论

经过粗略计算可以得到:

经线上,变化 1纬度 的距离 L = 10000 / 90 ≈ 111.11 km

纬度为θ的纬线上,变化 1经度 的距离 L = R' / 360 ≈ 111.11 cosθ km


 

### 回答1: 可以使用 Haversine 公式来计算一个点周围5km的经纬度范围。以下是 Java 代码示例: ```java public static final double R = 6371; // 地球半径,单位为千米 public static double[] getBoundingBox(double lat, double lon, double distance) { double d = distance / R; // 距离转换为弧 double lat1 = Math.toRadians(lat); double lon1 = Math.toRadians(lon); double latMin = lat1 - d; double latMax = lat1 + d; double deltaLon = Math.asin(Math.sin(d) / Math.cos(lat1)); double lonMin = lon1 - deltaLon; double lonMax = lon1 + deltaLon; double[] bbox = new double[4]; bbox[] = Math.toDegrees(latMin); bbox[1] = Math.toDegrees(lonMin); bbox[2] = Math.toDegrees(latMax); bbox[3] = Math.toDegrees(lonMax); return bbox; } ``` 其中,`lat` 和 `lon` 分别是点的纬和经,`distance` 是距离,单位为千米。函数返回一个长为 4 的数组,分别表示最小纬、最小经、最大纬和最大经。 ### 回答2: 在Java语言中,可以使用经纬度计算公式和数学函数来计算一个点周围5km的经纬度范围。以下是一个示例代码: ```java import java.util.*; public class LatLonRangeCalculator { public static void main(String[] args) { double lat = 39.9087; // 假设要计算的点的纬为39.9087 double lon = 116.3975; // 假设要计算的点的经116.3975 double R = 6371; // 地球的半径,单位为千米 double d = 5; // 周围距离,单位为千米 double lat1 = Math.toRadians(lat); // 将纬转换为弧 double lon1 = Math.toRadians(lon); // 将经转换为弧 double lat2 = Math.asin(Math.sin(lat1) * Math.cos(d / R) + Math.cos(lat1) * Math.sin(d / R) * Math.cos(0)); double lon2 = lon1 + Math.atan2(Math.sin(0) * Math.sin(d / R) * Math.cos(lat1), Math.cos(d / R) - Math.sin(lat1) * Math.sin(lat2)); double lat3 = Math.asin(Math.sin(lat1) * Math.cos(d / R) + Math.cos(lat1) * Math.sin(d / R) * Math.cos(Math.PI / 2)); double lon3 = lon1 + Math.atan2(Math.sin(Math.PI / 2) * Math.sin(d / R) * Math.cos(lat1), Math.cos(d / R) - Math.sin(lat1) * Math.sin(lat3)); double lat4 = Math.asin(Math.sin(lat1) * Math.cos(d / R) + Math.cos(lat1) * Math.sin(d / R) * Math.cos(Math.PI)); double lon4 = lon1 + Math.atan2(Math.sin(Math.PI) * Math.sin(d / R) * Math.cos(lat1), Math.cos(d / R) - Math.sin(lat1) * Math.sin(lat4)); double lat5 = Math.asin(Math.sin(lat1) * Math.cos(d / R) + Math.cos(lat1) * Math.sin(d / R) * Math.cos(3 * Math.PI / 2)); double lon5 = lon1 + Math.atan2(Math.sin(3 * Math.PI / 2) * Math.sin(d / R) * Math.cos(lat1), Math.cos(d / R) - Math.sin(lat1) * Math.sin(lat5)); double lat6 = Math.asin(Math.sin(lat1) * Math.cos(d / R) + Math.cos(lat1) * Math.sin(d / R) * Math.cos(2 * Math.PI)); double lon6 = lon1 + Math.atan2(Math.sin(2 * Math.PI) * Math.sin(d / R) * Math.cos(lat1), Math.cos(d / R) - Math.sin(lat1) * Math.sin(lat6)); double lat2_deg = Math.toDegrees(lat2); // 将纬转换为数 double lon2_deg = Math.toDegrees(lon2); // 将经转换为数 double lat3_deg = Math.toDegrees(lat3); // 将纬转换为数 double lon3_deg = Math.toDegrees(lon3); // 将经转换为数 double lat4_deg = Math.toDegrees(lat4); // 将纬转换为数 double lon4_deg = Math.toDegrees(lon4); // 将经转换为数 double lat5_deg = Math.toDegrees(lat5); // 将纬转换为数 double lon5_deg = Math.toDegrees(lon5); // 将经转换为数 double lat6_deg = Math.toDegrees(lat6); // 将纬转换为数 double lon6_deg = Math.toDegrees(lon6); // 将经转换为数 System.out.println("左上角纬:" + lat2_deg + ",经:" + lon2_deg); System.out.println("右上角纬:" + lat3_deg + ",经:" + lon3_deg); System.out.println("右下角纬:" + lat4_deg + ",经:" + lon4_deg); System.out.println("左下角纬:" + lat5_deg + ",经:" + lon5_deg); System.out.println("左上角纬:" + lat6_deg + ",经:" + lon6_deg); } } ``` 在上述代码中,使用了一系列的数学公式和函数来计算左上角、右上角、右下角、左下角和左上角5个点的经纬度。然后使用`Math.toDegrees()`函数将弧转换为数,并输出结果。请注意,上述代码中的经纬度距离都是示例值,你可以根据实际需求进行修改。 ### 回答3: 在Java语言中编写计算一个点周围5km经纬度范围的程序,可以使用Haversine公式来计算地球上两个点之间的距离。 Haversine公式可以通过给定两个点的经纬度计算出它们之间的直线距离。该公式的表达式如下: double R = 6371; // 地球的半径,单位为千米 double lat1 = Math.toRadians(纬1); double lon1 = Math.toRadians(经1); double lat2 = Math.toRadians(纬2); double lon2 = Math.toRadians(经2); double dlon = lon2 - lon1; double dlat = lat2 - lat1; double a = Math.sin(dlat / 2) * Math.sin(dlat / 2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dlon / 2) * Math.sin(dlon / 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double distance = R * c; // 两点之间的距离,单位为千米 根据上述公式,我们可以计算出给定点的某个方向上5km的经纬度值。假设我们要计算北方向上5km的经纬度范围,可以按照以下步骤进行计算: 1. 将给定点的纬转换为弧。 2. 计算距离的增量,即将5km转换为千米,并除以地球的半径。 3. 计算新点的纬,通过将给定点的纬加上距离增量。 4. 计算新点的经,通过将给定点的经加上一个合适的值,使得经线长与给定点纬线长相等(考虑纬变化对经线长的影响)。 以下是一个示例程序,计算一个点北方向上5km的经纬度范围: double latitude = 39.906677; // 给定点的纬 double longitude = 116.397128; // 给定点的经 double delta = 5 / R; // 距离的增量 double newLatitude = latitude + delta; // 新点的纬 double newLongitude = longitude; System.out.println("北方向上的经纬度范围:"); System.out.println("纬范围:" + newLatitude + " - " + latitude); System.out.println("经范围:" + newLongitude + " - " + newLongitude); 以上代码仅计算了北方向上的经纬度范围,其他方向上的计算类似,只需调整经或纬的增量即可。根据实际需要,可以在程序中添加循环来计算更多方向上的范围。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值