159 votes

Comment obtenir l'emplacement du visiteur (c'est-à-dire le pays) à l'aide de la géolocalisation ?

J'essaie d'étendre la fonction de géolocalisation native

if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;
    });
}

afin que je puisse utiliser le nom du pays du visiteur (et éventuellement renvoyer un tableau informatif).

Jusqu'à présent, tout ce que j'ai pu trouver, ce sont des fonctions qui affichent une interface google maps, mais aucune ne donne réellement ce que je veux, à l'exception de cette bibliothèque qui a bien fonctionné dans cet exemple mais pour une raison quelconque, il n'a pas fonctionné sur mon ordinateur. Je ne sais pas pourquoi cela s'est mal passé.

Enfin, savez-vous comment renvoyer un tableau contenant des informations telles que le pays, la ville, etc. à partir des valeurs de latitude et de longitude ?

13voto

hippietrail Points 4257

Un service très facile à utiliser est fourni par ws.geonames.org . Voici un exemple d'URL :

http://ws.geonames.org/countryCode?lat=43.7534932&lng=28.5743187&type=JSON

Et voici un peu de code (jQuery) que j'ai ajouté à votre code :

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        $.getJSON('http://ws.geonames.org/countryCode', {
            lat: position.coords.latitude,
            lng: position.coords.longitude,
            type: 'JSON'
        }, function(result) {
            alert('Country: ' + result.countryName + '\n' + 'Code: ' + result.countryCode);
        });
    });
}​

Essayez-le jsfiddle.net ...

13voto

anmml Points 154

Vous ne pouvez pas obtenir l'emplacement de la ville par l'adresse IP. Ici vous pouvez obtenir le pays avec jquery :

$.get("http://ip-api.com/json", function(response) {
console.log(response.country);}, "jsonp");

8voto

Un service gratuit et facile à utiliser est proposé à l'adresse suivante Webtechriser (cliquez ici pour lire l'article) (appelé wipmania ). Celui-ci est un JSONP et exige des services simples javascript codage avec HTML . Il peut également être utilisé dans JQuery . J'ai modifié un peu le code pour changer le format de sortie et voici ce que j'ai utilisé et qui fonctionne : (c'est le code de ma page HTML)

<html>
    <body>
        <p id="loc"></p>

        <script type="text/javascript">
            var a = document.getElementById("loc");

                function jsonpCallback(data) { 
                a.innerHTML = "Latitude: " + data.latitude + 
                              "<br/>Longitude: " + data.longitude + 
                              "<br/>Country: " + data.address.country; 
                }
        </script>
        <script src="http://api.wipmania.com/jsonp?callback=jsonpCallback"
                     type="text/javascript"></script>

    </body>
</html>

A NOTER : Ce service permet d'obtenir la localisation du visiteur sans invitant le visiteur à choisir s'il souhaite partager sa position, contrairement à l'application API de géolocalisation HTML 5 (le code que vous avez écrit). La vie privée est donc compromise. Il convient donc d'utiliser ce service avec discernement.

7voto

ak100 Points 225

Je voulais localiser les prix côté client pour quelques pays sans utiliser d'api externe, j'ai donc utilisé l'objet Date local pour récupérer le pays en utilisant new Date()).toString().split('(')[1].split(" ")[0]

    document.write((new Date()).toString().split('(')[1].split(" ")[0])

Ce petit extrait de code extrait le premier mot de l'objet Date. Pour vérifier les différents fuseaux horaires, vous pouvez changer l'heure de votre machine locale.

Dans mon cas, notre service ne comprenait que trois pays, j'ai donc pu obtenir la localisation à l'aide du code suivant.

const countries = ["India", "Australia", "Singapore"]
const countryTimeZoneCodes = {
  "IND": 0,
  "IST": 0,
  "AUS": 1,
  "AES": 1,
  "ACS": 1,
  "AWS": 1,
  "SGT": 2,
  "SIN": 2,
  "SST": 2
} // Probable three characters from timezone part of Date object
let index = 0
try {
  const codeToCheck = (new Date()).toString().split('(')[1].split(" ")[0].toUpperCase().substring(0, 3)
  index = countryTimeZoneCodes[codeToCheck]

} catch (e) {

  document.write(e)
  index = 0
}

document.write(countries[index])

Il s'agissait simplement d'améliorer l'expérience des utilisateurs. Il ne s'agit pas d'une solution à toute épreuve pour détecter l'emplacement. Comme solution de repli en cas de détection incorrecte, j'ai ajouté une liste déroulante dans la barre de menus pour sélectionner le pays.

5voto

iftikharyk Points 32

Vous pouvez simplement importer dans votre app.component.ts ou tout autre composant que vous souhaitez utiliser

import { HttpClient } from '@angular/common/http';

Ensuite, faites un simple GET demande à http://ip-api.com/json

  getIPAddress() {
    this.http.get("http://ip-api.com/json").subscribe((res: any) => {
      console.log('res ', res);
    })
  }

Vous obtiendrez la réponse suivante en l'utilisant :

{
    "status": "success",
    "country": "country fullname here",
    "countryCode": "country shortname here",
    "region": "region shortname here",
    "regionName": "region fullname here",
    "city": "city fullname here",
    "zip": "zipcode will be in string",
    "lat": "latitude here will be in integer",
    "lon": "logitude here will be in integer",
    "timezone": "timezone here",
    "isp": "internet service provider name here",
    "org": "internet service provider organization name here",
    "as": "internet service provider name with some code here",
    "query": "ip address here"
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X