J'essaie de localiser un utilisateur grâce à son adresse IP, puis de les montrer dans une carte google. Quelle serait la meilleure approche à cette fin? Ou y at-il un autre moyen d'obtenir l'utilisateur lat/long et montrer em dans une carte google au lieu de l'adresse IP.en essayant d'obtenir l'emplacement de l'utilisateur via IP
Répondre
Votre question est en fait 2 questions. La première partie obtient lat, lng d'une adresse IP. AFAIK, google maps api ne fournit pas de géolocalisation IP. Par conséquent, pour afficher l'adresse IP sur une carte google, vous devez d'abord obtenir l'emplacement géographique (soit en tant qu'adresse, soit en tant que lat, lng). Il existe diverses API payées et non payées sur le Web qui vous permettent de le faire, et django est livré avec un utilitaire pour cela. Les documents sont here. Votre cas d'utilisation serait mis en œuvre:
from django.contrib.gis.utils import GeoIP
g = GeoIP()
lat,lng = g.lat_lon(user_ip)
ou
address = g.city(user_ip)
REMARQUE: Cet utilitaire, ou l'une des nombreuses API de géolocalisation sur IP libre pourrait ne pas être très précis.
Quant à la deuxième partie, de montrer cet endroit sur une carte Google, vous pouvez consulter cette application:
Vous pouvez utiliser la suite, mais je ne suis pas sûr que cela fonctionnerait dans tous les navigateurs.
if (navigator) { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { do_something(position.coords.latitude, position.coords.longitude); }); } }
Localisation d'un utilisateur dépendra de l'appareil que vous ciblez et granularité/précision avec lequel vous voulez afficher son emplacement sur la carte.
L'adresse IP est plus adaptée aux ordinateurs portables et autres périphériques non GPS. Deuxièmement, comme vous le savez, l'adresse IP ne fera que pointer la passerelle de l'utilisateur. Dans mon cas, la passerelle est à environ 8 miles de l'endroit où je réside donc vous pouvez imaginer que la précision ne convient que pour une certaine classe d'applications telles que des outils d'analyse comme omniture ou mixpanel.
D'autre part, si vous développez votre application pour un appareil mobile, vous pouvez commencer à lire à ce sujet dans la question posée here. L'utilisation de gps/agps vous donnera une précision de quelques mètres. Ceci est plus adapté pour les applications LBS comme Gowalla ou Foursquare. Le HTML5 facilite l'implémentation de ce dernier, surtout si vous ciblez des appareils iOS et Android.
Un peu de code de manchette en python est donné ci-dessous. Les détails de gmaps api v3 peuvent être trouvés here.
mise en œuvre du serveur en Python pour enregistrer l'emplacement et générer des marqueurs
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)
em en utilisant Django 1.0 et l'API Google Maps – MajorGeek