Django 试图通过IP获取用户位置

Django 试图通过IP获取用户位置,django,geolocation,maps,Django,Geolocation,Maps,我试图通过一个用户的IP地址找到他/她,然后在谷歌地图上显示他们。这方面的最佳方法是什么。或者有没有其他方法可以获取用户lat/long并在google地图中显示em而不是IP地址。您可以使用以下方法,但我不确定这是否适用于所有浏览器 你的问题实际上是两个问题。第一部分是从ip地址获取lat、lng。顺便说一句,谷歌地图api不提供基于IP的地理定位。因此,要在谷歌地图上显示IP地址,您必须首先获得地理位置(作为地址或lat,lng)。网络上有各种付费和非付费的API,允许您这样做,django

我试图通过一个用户的IP地址找到他/她,然后在谷歌地图上显示他们。这方面的最佳方法是什么。或者有没有其他方法可以获取用户lat/long并在google地图中显示em而不是IP地址。

您可以使用以下方法,但我不确定这是否适用于所有浏览器


你的问题实际上是两个问题。第一部分是从ip地址获取lat、lng。顺便说一句,谷歌地图api不提供基于IP的地理定位。因此,要在谷歌地图上显示IP地址,您必须首先获得地理位置(作为地址或lat,lng)。网络上有各种付费和非付费的API,允许您这样做,django本身也提供了一个实用程序。 这些文件是。您的用例将实现为:

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

注意:此实用程序或许多免费的基于IP的地理定位API之一可能不太准确

至于第二部分,要在谷歌地图上显示此位置,您可以查看此应用程序:


定位用户将取决于您要定位的设备以及您希望在地图上显示其位置的粒度/准确性。

ip地址更适合笔记本电脑和其他非GPS设备。第二,正如您所知,ip地址将只针指向用户的网关。在我的例子中,网关距离我居住的地方大约8英里,所以你可以想象,准确度只适用于特定类别的应用程序,如omniture或mixpanel等分析工具

另一方面,如果你正在为移动设备开发应用程序,你可以在提出的问题中开始阅读。使用gps/agps将使您的精度在几米以内。这更适合像gowalla或foursquare这样的LBS应用。HTML5使您能够轻松实现后者,特别是当您针对iOS和Android设备时

下面给出了python中的一些现成代码。可以找到GMAPSAPIV3的详细信息

用Python实现服务器以记录位置并生成标记

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)
类记录位置(webapp.RequestHandler):
def post(自我):
会话=会话管理器(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(“”)
self.response.out.write(“位置更新
”) self.response.out.write(“”) 类GenerateMarkers(webapp.RequestHandler): def get(自我): 会话=会话管理器(self) 如果session.is_set(): markers=db.GqlQuery(“从标记中选择*) doc=“” doc+=“” 对于标记中的标记: doc+=“” doc+=“” self.response.out.write(文档)
em使用Django 1.0和谷歌地图API
address = g.city(user_ip)
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)