给一个经纬度找出它半径1公里内的经纬度取值范围 python代码 考虑圆形范围
时间: 2023-11-08 11:05:46 浏览: 268
以下是使用 Python 实现根据给定的经纬度和半径,计算出经纬度范围的代码:
```python
import math
def get_range(lat, lng, radius):
# 将经纬度转换为弧度
lat = lat * math.pi / 180.0
lng = lng * math.pi / 180.0
# 计算纬度范围
r = radius / 6371.0
lat_min = lat - r
lat_max = lat + r
# 计算经度范围
delta_lng = math.asin(math.sin(r) / math.cos(lat))
lng_min = lng - delta_lng
lng_max = lng + delta_lng
# 将经纬度范围转换回角度
lat_min = lat_min * 180.0 / math.pi
lat_max = lat_max * 180.0 / math.pi
lng_min = lng_min * 180.0 / math.pi
lng_max = lng_max * 180.0 / math.pi
return (lat_min, lat_max, lng_min, lng_max)
```
以上函数的参数 `lat`、`lng` 和 `radius` 分别表示中心点的纬度、经度和半径,单位是度和千米。函数返回一个元组,包含了经纬度范围的南北边界和东西边界。
如果要考虑圆形范围,还需要使用一些额外的代码来判断一个点是否在圆内,可以使用 Haversine 公式计算两点之间的距离,然后判断距离是否小于半径即可。以下是完整的代码:
```python
import math
def haversine(lat1, lng1, lat2, lng2):
r = 6371.0
d_lat = math.radians(lat2 - lat1)
d_lng = math.radians(lng2 - lng1)
a = math.sin(d_lat/2) * math.sin(d_lat/2) + math.cos(math.radians(lat1)) \
* math.cos(math.radians(lat2)) * math.sin(d_lng/2) * math.sin(d_lng/2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
return r * c
def get_range(lat, lng, radius):
# 将经纬度转换为弧度
lat = lat * math.pi / 180.0
lng = lng * math.pi / 180.0
# 计算纬度范围
r = radius / 6371.0
lat_min = lat - r
lat_max = lat + r
# 计算经度范围
delta_lng = math.asin(math.sin(r) / math.cos(lat))
lng_min = lng - delta_lng
lng_max = lng + delta_lng
# 将经纬度范围转换回角度
lat_min = lat_min * 180.0 / math.pi
lat_max = lat_max * 180.0 / math.pi
lng_min = lng_min * 180.0 / math.pi
lng_max = lng_max * 180.0 / math.pi
return (lat_min, lat_max, lng_min, lng_max)
def is_in_circle(lat1, lng1, lat2, lng2, radius):
distance = haversine(lat1, lng1, lat2, lng2)
return distance <= radius
lat = 31.2304
lng = 121.4737
radius = 1.0
lat_min, lat_max, lng_min, lng_max = get_range(lat, lng, radius)
print("经度范围:", lng_min, "-", lng_max)
print("纬度范围:", lat_min, "-", lat_max)
# 判断一个点是否在圆内
lat2 = 31.2303
lng2 = 121.4738
print("是否在圆内:", is_in_circle(lat, lng, lat2, lng2, radius))
```
阅读全文