2010-11-03 67 views
7

我試圖通過他/她的IP地址找到用戶,然後在谷歌地圖中顯示他們。對此目的最好的方法是什麼?或者有沒有其他方式讓用戶lat/long並在谷歌地圖中顯示em而不是IP地址。試圖通過IP獲取用戶位置

+2

EM使用Django 1.0和谷歌地圖API – MajorGeek 2010-11-03 19:48:07

回答

8

你的問題實際上是兩個問題。第一部分是從ip地址獲取lat,lng。 AFAIK,谷歌地圖API不提供基於IP的地理位置。因此,要在Google地圖上顯示IP地址,您必須首先獲取地理位置(作爲地址或lat,lng)。網上有各種付費和未付費的API可以讓你做到這一點,而Django本身也帶有一個實用工具。 該文檔是here

from django.contrib.gis.utils import GeoIP 
g = GeoIP() 
lat,lng = g.lat_lon(user_ip) 

address = g.city(user_ip) 

注意:你的使用情況將作爲實施該實用程序,或許多免費的基於IP的地理定位API中的一個可能不是很準確。

至於第二部分,展現了谷歌地圖上的這個位置,你可以看看這個應用程序:

http://code.google.com/p/django-googlemap/

0

您可以使用以下方式,但我不確定這是否適用於所有瀏覽器。

if (navigator) { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function (position) { 
      do_something(position.coords.latitude, position.coords.longitude); 
     }); 
    } 
} 
0

的用戶定位,將取決於你的目標設備和粒度上/精度你想要在地圖上顯示他的位置。

該ip地址更適合筆記本電腦和其他非GPS設備。其次,正如你所知道的,IP地址只能指向用戶的網關。在我的情況下,網關離我居住的地方大約8英里,所以你可以想象準確度只適用於某些類別的應用程序,如omniture或mixpanel等分析工具。

另一方面,如果您正在爲移動設備開發應用程序,則可以在here提出的問題中開始閱讀關於它的內容。使用gps/agps可以爲您提供幾米內的準確度。這更適合於像gowalla或foursquare這樣的LBS應用程序。 HTML5使您可以輕鬆實現後者,尤其是在您定位iOS和Android設備時。

下面給出了一些關於python的袖口代碼。 gmaps api v3的詳細信息可以在here找到。在Python

Server實現記錄位置和生成標記

class RecordLocation(webapp.RequestHandler): 
    def post(self): 
    session=SessionManager(self) 
     if session.is_set(): marker=Markers(lat=self.request.get('lat'),lon=self.request.get('lon'),user_id=self.request.get('user')) 
     marker.put() 
     self.response.out.write('<html><body>') 
     self.response.out.write(" Location Updated<br/>") 
     self.response.out.write('</body></html>') 

    class GenerateMarkers(webapp.RequestHandler): 
     def get(self): 
      session=SessionManager(self) 
      if session.is_set(): 
       markers=db.GqlQuery("SELECT * FROM Markers") 
       doc='<?xml version="1.0"?>' 
       doc+='<markers>' 
       for marker in markers: 
        doc+='<marker ' 
        doc+='lat="'+marker.lat+'" ' 
        doc+='lon="'+marker.lon+'" ' 
        doc+='type="restaurant" ' 
        doc+='/>' 
        doc+='</markers>' 
       self.response.out.write(doc) 
相關問題