2014-07-23 59 views
7

有無論如何,我可以通過python獲取我的設備的位置。目前我不得不使用硒並打開瀏覽器,使用位置服務網站並將其結果設置爲經緯度變量。通過python獲取您的位置

但有沒有更簡單的方法來做到這一點?

更新:我在我的RaspberryPi上使用了一個3G加密狗,因此尋找一種方法來獲得特定的經緯度 - 我可以通過網絡服務成功完成此任務,只是想知道是否有更快的方法python的這些請求?

+0

看到這個問題/答案:http://stackoverflow.com/questions/2543018/what-python-libraries-can-tell-me-approximate-location-and-time-zone-given-an-ip –

+0

我是不知道這是我的尋找,因爲這是一個普通的知識產權發現 - 我想精確到我的位置,很像移動地理位置。 –

+0

當你說「我的設備的位置」時,你是在說手機(或類似的)還是臺式電腦? –

回答

20

假設:

用於正在尋求位置的設備運行的是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用於生成位置。

+1

但是它有時會回覆錯誤的迴應。我已經爲IP 103.198.128.234嘗試了這一做法,並以美國爲迴應。其實,這個國家是印度。在當地它工作得很好,但是當我活着的時候。 –

+0

你的劇本非常簡單,並且像魅力一樣工作! – BSP

1

這裏的一個的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 
0

@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) 
1

其他人所說的幾個服務,但另外一個要考慮的是我自己的,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

+0

謝謝!你的答案比接受的(儘管很酷)的答案更準確,有時候答案會錯誤的大陸...... – tehfink

0

一直在玩這個,所以感謝所有在這個線程中的有用答案(和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') 
5

,或者因爲這

import geocoder 
g = geocoder.ip('me') 
print(g.latlng) 
0

簡單隨着https://ipdata.co API

import requests 
r = requests.get('https://api.ipdata.co').json() 
r['country_name'] 
# United States 
短節目