пытаясь получить местоположение пользователя через IP - PullRequest
7 голосов
/ 03 ноября 2010

Я пытаюсь найти пользователя по его / ее IP-адресу, а затем показать его на карте Google. что будет лучшим подходом для этой цели. Или есть какой-либо другой способ получить пользователя lat / long и показать их на карте Google вместо IP-адреса.

Ответы [ 3 ]

8 голосов
/ 03 ноября 2010

Ваш вопрос на самом деле 2 вопроса.Первая часть - это получение lat, lng с IP-адреса.AFAIK, Google Maps API не обеспечивает геолокации на основе IP.Поэтому, чтобы отобразить IP-адрес на карте Google, сначала необходимо получить географическое местоположение (либо в виде адреса, либо в виде широты, долготы).В Интернете существуют различные платные и неоплачиваемые API, которые позволяют вам это делать, и сам django поставляется с утилитой для этого.Документы здесь .Ваш вариант использования будет реализован следующим образом:

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

или

address = g.city(user_ip)

ПРИМЕЧАНИЕ. Эта утилита или один из многих бесплатных API геолокации на основе IP могут быть ОЧЕНЬ точными.

Что касается второй части, чтобы показать это местоположение на карте Google, вы можете проверить это приложение:

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

0 голосов
/ 04 ноября 2010

Определение местоположения пользователя будет зависеть от целевого устройства и степени детализации / точности, с которой вы хотите отобразить его местоположение на карте.

IP-адрес больше подходит для ноутбуков и других устройств, не поддерживающих GPS.Во-вторых, как вы знаете, IP-адрес будет только указывать шлюз пользователя.В моем случае шлюз находится примерно в 8 милях от того места, где я живу, так что вы можете себе представить, что точность подходит только для определенного класса приложений, таких как инструменты анализа, такие как omniture или mixpanel.

С другой стороны, если вы разрабатываетеВаше приложение для мобильного устройства вы можете начать читать об этом в вопросе здесь .Использование gps / agps даст вам точность в пределах нескольких метров.Это больше подходит для приложений LBS, таких как gowalla или foursquare.HTML5 позволяет вам легко реализовать последнее, особенно если вы нацелены на устройства iOS и Android.

Некоторые из кодов-манжет в python приведены ниже.Подробную информацию о gmaps api v3 можно найти здесь .

Реализация сервера в 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)
0 голосов
/ 03 ноября 2010

Вы можете использовать следующее, но я не уверен, будет ли это работать во всех браузерах.

if (navigator) {
     if (navigator.geolocation) {
         navigator.geolocation.getCurrentPosition(function (position) {
             do_something(position.coords.latitude, position.coords.longitude);
         });
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...