Python GeoJango:使用geoip2获得准确的设备位置
我正在尝试获取用户的设备位置。但geoip2返回的位置远离用户位置(近20-25公里)。当我通过移动网络连接设备时,当我将设备与wifi连接时,它会显示不同的位置 首先,我得到了用户的ipPython GeoJango:使用geoip2获得准确的设备位置,python,django,geolocation,geoip,geoip2,Python,Django,Geolocation,Geoip,Geoip2,我正在尝试获取用户的设备位置。但geoip2返回的位置远离用户位置(近20-25公里)。当我通过移动网络连接设备时,当我将设备与wifi连接时,它会显示不同的位置 首先,我得到了用户的ip def get_ip(request): xff = request.META.get('HTTP_X_FORWARDED_FOR') if xff: ip = xff.split(',')[0] else: ip = request.META
def get_ip(request):
xff = request.META.get('HTTP_X_FORWARDED_FOR')
if xff:
ip = xff.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR', None)
return ip
但是这会得到用户的私有ip,而私有ip不在国家或城市数据集中,因此geoip2会抛出一个错误
所以我尝试通过一个网站获取公共ip地址
def get_ip(request):
from requests import get
ip = get('https://api.ipify.org').text
if ip:
return ip
现在我使用geoip2来获取用户的位置数据
def home(request,):
....
....
....
....
from django.contrib.gis.geoip2 import GeoIP2
g = GeoIP2()
ip = get_ip(request)
print(ip)
country = g.country(ip)
city = g.city(ip)
print(country, city)
lat, long = g.lat_lon(ip)
print(lat, long)
...
...
...
您能推荐一种更好的方法或正确的方法来获取用户的准确位置吗?首先,您需要了解geoip2使用的.dat/csv文件只不过是包含根据国家/城市/经纬度确定的IP地址范围的文件。这些文件需要及时更新,以获得更准确的数据。 其次,如果您使用localhost执行此操作,那么第一个代码将返回127.0.0.1 IP地址,因为您正在获取远程IP
def home(request):
xff = request.META.get('HTTP_X_FORWARDED_FOR')
if xff:
ip = xff.split(',')[0]
country = g.country(ip)
city = g.city(ip)
lat, long = g.lat_lon(ip)
else:
ip = request.META.get('REMOTE_ADDR', None)
country = 'Your Country Name'
city='Your City'
lat,long = 'Your Latitude','Your Longitiude'
print(country, city)
print(lat, long)
这段代码也适用于本地主机,因此不会出现IP错误。要获得准确的位置,请更新您的dat/csv文件GeoIP永远都不准确,即使它是实时的。它有您的设备“接入互联网”的IP地址的位置。在你上网之前,许多提供商会先将你路由到他们的内部网络。例如,我总是在法兰克福,而我在柏林,在几百公里以北。您需要使用浏览器界面才能更准确。我希望数据集得到更新。因为我是从真实来源获得的。@Debopriyoda是的,所以他们的数据集可能有问题,可能不准确。无论如何,没有办法得到100%准确的数据。如果需要,可以修改该文件。如果您发现此答案是您问题的正确答案,请将此答案标记为正确,以便关闭此问题。