如何使用纬度和经度获取用户当前位置

How to get user current location with lat and long

我关注了 geocoder 一段时间以获取用户的当前位置和信息,并单独使用经纬度值。

我试过的代码

import geocoder
myloc = geocoder.ip('me')
print(myloc.latlng)
print(geocoder.ipinfo())

得到info值就可以了。但经纬度值似乎有所不同。它显示了几乎 8~9km 距离的位置。似乎运行时间也有点长。 有没有其他方法可以获得足够接近的经纬度值并且运行时间也更快?

geocoder 使用您的 ip 获取位置(而不是使用更高级的技术,如 WIFI SSID 映射和 GPS),这不是那么准确。

来自iplocation.net

  1. How accurate is IP-based Geolocation?

Accuracy of geolocation database varies depending on which database you use. For IP-to-country database, some vendors claim to offer 98% to 99% accuracy although typical Ip2Country database accuracy is more like 95%. For IP-to-Region (or City), accuracy range anywhere from 50% to 75% if neighboring cities are treated as correct. Considering that there is no official source of IP-to-Region information, 50+% accuracy is pretty good.

您可以尝试此处提到的方法:https://github.com/joeljogy/Getting-GeoLocation 以获得更准确的结果。

您需要了解 IP 地理定位的工作原理才能知道为什么您得不到准确的结果。

1- IP 地理定位使用您的 public IP 地址来定位您。大多数情况下,此地址是由您的互联网提供商分配给您的。

这不是您的计算机或您家的 IP,而是您的 Internet 提供商设备之一的 IP(它们到 Internet 的出口点、其基础设施内某处路由器的 IP,或其他任何东西)。

2- IP 地址没有附加位置信息,根据您使用的地理位置 API,结果可能或多或少精确.我使用 Abstract Geolocation 因为它免费、准确并且实时工作:https://www.abstractapi.com/ip-geolocation-api 您需要创建一个帐户来获取您的 API 密钥,这只需几秒钟。

3- 地理编码器有时可能会很慢。调用 API 就像通过 Geocoder 一样简单,因此您可以不用它并获得更快的响应:

import requests
import json

response = requests.get("https://ipgeolocation.abstractapi.com/v1/?api_key=YOUR_API_KEY")
data = json.loads(response.content)
print(data)

这将显示有关您的 IP 地址的大量信息,您可以选择添加 ip_address 参数以获取有关另一个 IP 的信息。