2010-11-03 20 views
7

Estoy tratando de localizar a un usuario a través de su dirección IP y luego mostrarlos en un mapa de Google. cuál sería el mejor enfoque para este propósito. ¿O hay otra forma de que el usuario tenga latitud/longitud y muestre em en un mapa de Google en lugar de la dirección IP?tratando de obtener la ubicación del usuario a través de IP

+2

em usando Django 1.0 y Google Maps API – MajorGeek

Respuesta

8

Su pregunta es en realidad 2 preguntas. La primera parte es obtener lat, lng de una dirección IP. AFAIK, google maps api no proporciona geolocalización basada en IP. Por lo tanto, para mostrar la dirección IP en un mapa de Google, primero debe obtener la ubicación geográfica (ya sea como una dirección, o como lat, lng). Hay varias API pagas y no pagas en la web que le permiten hacer esto, y django viene con una utilidad para esto. Los documentos son here. Su caso de uso podría ser implementado como:

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

o

address = g.city(user_ip) 

NOTA: Esta utilidad, o una de las muchas API de geolocalización basadas en IP libres podría no ser muy precisa.

En cuanto a la segunda parte, para mostrar esta ubicación en un mapa de Google, se puede consultar esta aplicación:

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

0

Puede usar la siguiente, pero no estoy seguro de si esto funcionaría en todos los navegadores.

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

Localización de un usuario dependería del dispositivo al que está apuntando y granularidad/exactitud con el que desea mostrar su ubicación en el mapa.

La dirección IP es más adecuada para portátiles y otros dispositivos que no sean GPS. En segundo lugar, como sabrá, la dirección IP solo señalará la puerta de enlace del usuario. En mi caso, la puerta de enlace está a unas 8 millas de donde vivo, por lo que puedes imaginar que la precisión solo es adecuada para una determinada clase de aplicaciones, como herramientas de análisis como omniture o mixpanel.

Por otro lado, si está desarrollando su aplicación para un dispositivo móvil, puede comenzar a leer sobre ella en la pregunta here. Usar gps/agps le dará una precisión de unos pocos metros. Esto es más adecuado para aplicaciones LBS como gowalla o foursquare. HTML5 le facilita la implementación de este último, especialmente si se dirige a dispositivos iOS y Android.

Algunos de los códigos de puño en python se indican a continuación. Los detalles de gmaps api v3 se pueden encontrar en here.

aplicación de servidor en Python para registrar la ubicación y generar marcadores

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) 
Cuestiones relacionadas