2010-11-03 59 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)