以下是一个示例代码解决方案,其包含一个名为filterLocationsByDistance
的函数,该函数接受一个位置列表和一个中心点,然后根据给定的距离筛选出距离中心点一定范围内的位置。
from math import sin, cos, sqrt, atan2, radians
class GeoPoint:
def __init__(self, latitude, longitude):
self.latitude = latitude
self.longitude = longitude
def calculate_distance(point1, point2):
# approximate radius of earth in km
R = 6371.0
lat1 = radians(point1.latitude)
lon1 = radians(point1.longitude)
lat2 = radians(point2.latitude)
lon2 = radians(point2.longitude)
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
distance = R * c
return distance
def filterLocationsByDistance(locations, center, distance):
filtered_locations = []
for location in locations:
if calculate_distance(location, center) <= distance:
filtered_locations.append(location)
return filtered_locations
# 示例用法
# 创建一个位置列表
locations = [
GeoPoint(37.7749, -122.4194), # San Francisco
GeoPoint(34.0522, -118.2437), # Los Angeles
GeoPoint(47.6062, -122.3321), # Seattle
GeoPoint(40.7128, -74.0060) # New York
]
# 创建中心点
center = GeoPoint(37.7749, -122.4194) # San Francisco
# 设置距离阈值(以千米为单位)
distance = 1000
# 使用函数筛选出距离中心点1000千米内的位置
filtered_locations = filterLocationsByDistance(locations, center, distance)
# 打印筛选后的位置列表
for location in filtered_locations:
print(f"Latitude: {location.latitude}, Longitude: {location.longitude}")
这个示例代码中的filterLocationsByDistance
函数通过计算每个位置与中心点的距离来筛选出符合距离要求的位置,并将其添加到一个新的列表中返回。
上一篇:包含更新时间的插入更新
下一篇:包含各种类型值的可索引类型接口