帮我写一个python函数,输入一个经纬坐标,输出距离这个经纬坐标在200km到800km范围距离内的所有经纬坐标,要求输出的坐标都是0.25的整数倍数
时间: 2024-05-11 08:14:30 浏览: 147
python依据经纬坐标计算两点距离并求图像横纵分辨率(csdn)————程序.pdf
5星 · 资源好评率100%
以下是一个可能的实现,使用了haversine公式计算球面距离:
```python
from math import radians, cos, sin, asin, sqrt
def get_nearby_coords(lat, lon):
# 计算距离200km的圆的半径
R = 6371 # 地球平均半径,单位km
radius_min = 200 # 最小半径,单位km
radius_max = 800 # 最大半径,单位km
d = radius_min / R
# 转换经纬度为弧度
lat, lon = map(radians, [lat, lon])
# 初始化结果列表
coords = []
# 遍历所有可能的0.25倍数经纬度坐标
for i in range(-720, 721):
for j in range(-1440, 1441):
lat2 = lat + d * sin(i * 0.25 / R)
lon2 = lon + d * cos(lat) * sin(j * 0.25 / R)
# 计算距离
d2 = haversine(lat, lon, lat2, lon2)
# 如果距离在指定范围内,添加到结果列表
if radius_min <= d2 <= radius_max:
coords.append((round(lat2, 2), round(lon2, 2)))
return coords
def haversine(lat1, lon1, lat2, lon2):
# 计算球面距离
R = 6371 # 地球平均半径,单位km
lat1, lon1, lat2, lon2 = map(radians, [lat1, lon1, lat2, lon2])
dlat = lat2 - lat1
dlon = lon2 - lon1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
return R * c
```
该函数以经纬度为输入参数,返回一个列表,包含距离输入经纬度在200km到800km范围内的所有经纬度坐标,坐标以0.25的整数倍数表示,精度为0.01度。
阅读全文