您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Google App Engine上的Python,根据GeoPT计算城市之间的距离并查找周边城市

5b51 2022/1/14 8:20:49 python 字数 3230 阅读 496 来源 www.jb51.cc/python

我定义了一个城市模型,用于保存城市的geoname_id和位置(如GeoPt).我想要实现两件事.>我希望距离某个城市500公里半径范围内的所有城市.>我想计算两个城市之间以km为单位的距离.实现这一目标的最佳方式是什么,请记住,我有一个非常庞大的城市数据库,我不想在性能因素上牺牲很多.任何帮助或建议表示赞赏.最佳答案这很完美,但速度很慢:计算距

概述

我定义了一个城市模型,用于保存城市的geoname_id和位置(如GeoPt).我想要实现两件事.

>我希望距离某个城市500公里半径范围内的所有城市.
>我想计算两个城市之间以km为单位的距离.

实现这一目标的最佳方式是什么,请记住,我有一个非常庞大的城市数据库,我不想在性能因素上牺牲很多.任何帮助或建议表示赞赏.

计算距离的功能.传递给此函数的参数是位置的纬度和经度元组或Geopt():

def haversineDistance(location1,location2):
  """Method to calculate Distance between two sets of Lat/Lon."""
  lat1,lon1 = location1
  lat2,lon2 = location2
  earth = 6371 #Earth's Radius in Kms.

 #Calculate Distance based in haversine Formula
 dlat = math.radians(lat2-lat1)
 dlon = math.radians(lon2-lon1)
 a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)
 c = 2 * math.atan2(math.sqrt(a),math.sqrt(1-a))
 d = earth * c
 return d

用于计算半径内的周边城市的函数.这是City模型下存储所有城市的方法

def get_closest_cities(self,kms):
  cities = []
  #Find surrounding Cities of a given city within a given radius
  allcities = self.country.city_set
  for city in allcities:
    distance = haversineDistance((self.location.lat,self.location.lon),(city.location.lat,city.location.lon))
    if not distance >= kms:
      cities.append((city.name,int(distance)))
  cities.remove(cities[0])
  return cities

总结

以上是编程之家为你收集整理的使用Google App Engine上的Python,根据GeoPT计算城市之间的距离并查找周边城市全部内容,希望文章能够帮你解决使用Google App Engine上的Python,根据GeoPT计算城市之间的距离并查找周边城市所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶