根据IP查找客户位置
使用地理IP
pip install python-geoip
pip install python-geoip-geolite2
然后你的代码将看起来像这样。
from geoip import geolite2
match = geolite2.lookup('8.8.8.8')
print match.location
这产生,
(37.386,-122.0838)
查找所有 AWS 中心的位置
该信息可从:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/LocationsOfEdgeServers.html http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/LocationsOfEdgeServers.html您需要找到他们的地理位置。这可以用 geopy 来完成
pip install geopy
Then
from geopy.geocoders import Nominatim
geolocator = Nominatim()
location = geolocator.geocode("Singapore")
print location.latitude, location.longitude
这使
1.2904527 103.852038
您需要对所有位置执行此操作并将数据保存在某个地方。可能在 RDBMS 中(如果您正在这样做,请考虑使用 django,django 对使用 GeoDjango 进行地理位置搜索有很好的支持)
终于找到距离了
找到客户端位置后,我们将其称为 l1,找到数据中心位置后,是时候找到距离了
from geopy.distance import great_circle
great_circle(l1.point, l2.point)
这就是你的距离
寻找最近距离
您可以循环遍历所有保存的位置并找到最近的距离,或者如果您将数据保存在支持地理空间数据的 RDBMS 中(立即想到 postgis),您可以使用ST_Distance
函数可以用很少的代码快速有效地进行距离比较。如前面提到的,django https://docs.djangoproject.com/en/1.10/ref/contrib/gis/geoquerysets/对地理空间查询有出色的支持。
如果您要使用 Postgis/Django ,涉及 Great_circle 的循环将被调用 st_distance 替换。