有無論如何,我可以通過python獲取我的設備的位置。目前我不得不使用硒並打開瀏覽器,使用位置服務網站並將其結果設置爲經緯度變量。通過python獲取您的位置
但有沒有更簡單的方法來做到這一點?
更新:我在我的RaspberryPi上使用了一個3G加密狗,因此尋找一種方法來獲得特定的經緯度 - 我可以通過網絡服務成功完成此任務,只是想知道是否有更快的方法python的這些請求?
有無論如何,我可以通過python獲取我的設備的位置。目前我不得不使用硒並打開瀏覽器,使用位置服務網站並將其結果設置爲經緯度變量。通過python獲取您的位置
但有沒有更簡單的方法來做到這一點?
更新:我在我的RaspberryPi上使用了一個3G加密狗,因此尋找一種方法來獲得特定的經緯度 - 我可以通過網絡服務成功完成此任務,只是想知道是否有更快的方法python的這些請求?
假設:
用於正在尋求位置的設備運行的是Python的 了一個可以訪問互聯網(因爲你提了位置服務的網站似乎是公平的)
在這樣的情況下,是與請求的IP用於生成位置的註釋中鏈接的服務類似的服務。例如,http://freegeoip.net/。
import requests
import json
send_url = 'http://freegeoip.net/json'
r = requests.get(send_url)
j = json.loads(r.text)
lat = j['latitude']
lon = j['longitude']
缺點
只有IP用於生成位置。
但是它有時會回覆錯誤的迴應。我已經爲IP 103.198.128.234嘗試了這一做法,並以美國爲迴應。其實,這個國家是印度。在當地它工作得很好,但是當我活着的時候。 –
你的劇本非常簡單,並且像魅力一樣工作! – BSP
這裏的一個的Python地理編碼模塊,其具有GeoFreeIP
實施例: http://geocoder.readthedocs.io/
$ pip install geocoder
使用CLI
$ geocode '99.240.181.199' --provider freegeoip --pretty --json
使用Python
>>> import geocoder
>>> g = geocoder.freegeoip('99.240.181.199')
<[OK] Freegeoip - Geocode [Ottawa, Ontario Canada]>
>>> g.json
@JishnuM奇妙地回答了問題。
從我2美分。你並不需要導入json庫。
你可以去如下:
freegeoip = "http://freegeoip.net/json"
geo_r = requests.get(freegeoip)
geo_json = geo_r.json()
user_postition = [geo_json["latitude"], geo_json["longitude"]]
print(user_postition)
其他人所說的幾個服務,但另外一個要考慮的是我自己的,https://ipinfo.io,which'll給你緯度,經度和一堆其他的信息:
$ curl ipinfo.io
{
"ip": "24.6.61.239",
"hostname": "c-24-6-61-239.hsd1.ca.comcast.net",
"city": "Mountain View",
"region": "California",
"country": "US",
"loc": "37.3845,-122.0881",
"org": "AS7922 Comcast Cable Communications, LLC",
"postal": "94040"
}
如果你只想要的座標數據,你可以得到只是通過請求/loc
:
$ curl ipinfo.io/loc
37.3845,-122.0881
有關更多詳細信息,請參閱https://ipinfo.io/developers。
謝謝!你的答案比接受的(儘管很酷)的答案更準確,有時候答案會錯誤的大陸...... – tehfink
一直在玩這個,所以感謝所有在這個線程中的有用答案(和SO一般!)想我會分享我的情況下,任何人都希望看到它結合大圓鈣
import geocoder
import requests
freegeoip = "http://freegeoip.net/json"
geo_r = requests.get(freegeoip)
geo_json = geo_r.json()
address=input('enter an address: ')
g= geocoder.google(address)
lat_ad=g.latlng[0]
lon_ad=g.latlng[1]
user_postition = [geo_json["latitude"], geo_json["longitude"]]
lat_ip=user_postition[0]
lon_ip=user_postition[1]
#Calculate the great circle distance between two points on the earth (specified in decimal degrees)
from math import radians, cos, sin, asin, sqrt
# convert decimal degrees to radians
lon_ad, lat_ad, lon_ip, lat_ip = map(radians, [lon_ad, lat_ad, lon_ip, lat_ip])
# haversine formula
dlon = lon_ip - lon_ad
dlat = lat_ip - lat_ad
a = sin(dlat/2)**2 + cos(lat_ad) * cos(lat_ip) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
km = 6367 * c
#end of calculation
#limit decimals
km = ('%.0f'%km)
print(address+' is about '+str(km)+' km away from you')
,或者因爲這
import geocoder
g = geocoder.ip('me')
print(g.latlng)
簡單隨着https://ipdata.co API
import requests
r = requests.get('https://api.ipdata.co').json()
r['country_name']
# United States
短節目
看到這個問題/答案:http://stackoverflow.com/questions/2543018/what-python-libraries-can-tell-me-approximate-location-and-time-zone-given-an-ip –
我是不知道這是我的尋找,因爲這是一個普通的知識產權發現 - 我想精確到我的位置,很像移動地理位置。 –
當你說「我的設備的位置」時,你是在說手機(或類似的)還是臺式電腦? –