2009-08-09 5 views
1

Je souhaite stocker l'emplacement actuel d'un utilisateur sur un site Web ASP.NET MVC pendant la durée d'une session. Parce que je veux utiliser l'emplacement côté serveur, la façon dont je pense que cela devrait fonctionner (peut-être d'autres suggestions?) Est quand un utilisateur frappe le site, j'obtiens l'emplacement et le stocke dans la session. ne pas avoir à être recherché à nouveau.Obtention de l'emplacement de l'utilisateur à l'aide de Google à partir du code .NET

La meilleure façon que je peux trouver est d'utiliser la méthode de ClientLocation de Google:

<script src="http://www.google.com/jsapi?key=YOURAPIKEY" type="text/javascript"></script> 
<script> 
    google.load("jquery", "1.2.6"); 
    google.load("jqueryui", "1.5.2"); 
    var yourLocation = google.loader.ClientLocation.address.city + ", " 
     + google.loader.ClientLocation.address.region; 
</script> 

Ma question est la meilleure façon d'obtenir l'emplacement recherché dans le code Javascript au serveur pour stocker dans la base de données ou la session. Je sais que je pourrais appeler une action de contrôleur en utilisant jQuery pour passer l'emplacement:

$.post("/Home/StoreLocation", location, function(){}); 

Mais pour la performance que je ne veux pas que cela se passe à chaque chargement d'une seule page. L'autre façon que je pensais le faire était d'appeler les APIs de Google à partir du code .NET en faisant quelque chose comme ça (un appel à géocodage):

string path = "http://maps.google.com/maps/geo?q=" + strAddress + "&output=csv&key=" + apiKey; 
WebClient client = new WebClient(); 
string[] eResult = client.DownloadString(sPath).ToString().Split(','); 
//Parse the array 

Mais je ne peux pas trouver un moyen équivalent à appeler ClientLocation directement à partir de une URL comme ceci - tous les exemples que j'ai vus utilisent google.loader (que je ne pense pas pouvoir utiliser de cette façon?) Une autre chose que j'ai considérée est l'utilisation de , mais je n'y trouve rien faire une recherche de lieu (peut-être que je me trompe?).

Répondre

1

Dans votre deuxième exemple, je ne comprends pas très bien strAddress. Avez-vous l'adresse du client? Ou est-ce leur IP? Je viens d'essayer cette URL avec mon adresse IP et il est dit que je suis à environ 1000 miles.

De toute façon, je ne vois pas ce qui ne va pas aveC# 1. Juste quelque chose comme ça dans votre Site.master:

<script type="text/javascript"> 
    //other javascript here 
    <% if (Sesssion.Contents["has_location"] == null) { %> 
    $(document).ready(function_to_submit_location) 
    <% } %> 
</script> 

modifié pour mettre l'instruction if dans les balises ASP - ce n'est pas javascript si.

éditer pour ceux qui veulent utiliser ce code vous devrez mettre quelque chose dans votre contrôleur afin de définir la session ["has_location"] = true lorsque vous obtenez l'emplacement.

+0

Oui! L'instruction conditionnelle C#!session ["has_location"] pour montrer/cacher l'appel de jQuery était ce qui me manquait, je ne sais pas pourquoi je n'ai pas pensé à ça! Merci James! (Le deuxième exemple est GeoCoding, juste pour montrer comment j'appellerais une URL du code - Je ne veux pas vraiment le géocoder Oui, vous passez dans l'adresse du client et il devrait retourner une Longitude/Latitude.) –

1

Cette question m'a incité à terminer un billet de blog que j'avais dans mon projet de dossier: http://www.alexjamesbrown.com/geek/development/dotnet/reverse-geocoding-with-google-api-and-c/

S'il vous plaît laissez-moi savoir si c'est d'une aide (ce n'est pas tout à fait ce que vous demandez ... mais il pourrait être adapté pour faire ce que vous voulez)

+0

Merci alex, je Je pensais faire quelque chose de similaire moi-même mais je ne pouvais pas trouver un URI pour faire exactement ce que je veux (l'exemple que vous utilisez convertit une adresse en coordonnées, je veux savoir quelle est la position de l'utilisateur). En y réfléchissant, cela a du sens car il faudrait l'appeler du côté du client, depuis son navigateur. –

+0

J'ai fait quelques recherches et n'ai pas pu trouver une API google pour obtenir l'emplacement de l'adresse IP. C'est tout ce que google utilise pour fournir l'emplacement du fichier javascript, donc il n'y a aucune raison pour qu'ils ne puissent pas l'exposer à une API afin que vous puissiez envoyer l'IP et obtenir l'emplacement ... mais il semble qu'ils ne le font pas. –

+0

Google Gears a quelque chose comme ça .... j'oublie ce qu'on appelle, mais je sais qu'il y a quelque chose. – Alex

0

La méthode de localisation du client Google est conçue pour être utilisée sur le frontal/dans le navigateur. Il semble que vous cherchiez quelque chose qui fonctionnerait sur votre serveur - un service Web ou une base de données IP locale.

MaxMind's dispose d'une base de données GeoIP gratuite avec une API C#. Vous transmettez l'adresse IP du client à la bibliothèque GeoIP et elle renvoie la ville et l'état.

http://www.maxmind.com/app/geolitecity

MaxMind dispose également d'un webservice disponible pour une somme modique.

Questions connexes