मैं अक्षांश और देशांतर बिंदु से शहर का नाम कैसे प्राप्त कर सकता हूं?


92

वहाँ जावास्क्रिप्ट के लिए गूगल मैप्स एपीआई का उपयोग कर एक अक्षांश और देशांतर बिंदु से एक शहर का नाम पाने के लिए एक रास्ता है?

यदि ऐसा है तो क्या मैं एक उदाहरण देख सकता हूं?


आपको एक वेब सेवा खोजने की आवश्यकता होगी जो यह प्रदान करती है।
डेविंडन जूल

जवाबों:


118

इसे Reverse Geocoding कहा जाता है


बहुत बढ़िया! मैं इस पर पढ़ा, और अब बहुत अधिक प्रश्नों के आने;) धन्यवाद।
डेनिस मार्टिनेज

प्रति IP पता और प्रति उपयोगकर्ता एक ही है यदि आप जावास्क्रिप्ट एपीआई का उपयोग कर रहे हैं, लेकिन यदि आप उदाहरण के लिए PHP का उपयोग कर रहे हैं और आपको लगता है कि आप इन सीमाओं तक पहुँचेंगे, तो आपको अनुरोधों को प्रति सेकंड 1 या सीमित करने की आवश्यकता होगी। प्रॉक्सी सर्वर, लेकिन परदे के पीछे से सावधान रहें, Google बेवकूफ नहीं है और आप उन्हें हथौड़ा नहीं दे सकते। यहाँ और अधिक जानकारी: Developers.google.com/maps/documentation/business/articles/…
एंडी जी

26

यहाँ एक पूरा नमूना है:

<!DOCTYPE html>
<html>
  <head>
    <title>Geolocation API with Google Maps API</title>
    <meta charset="UTF-8" />
  </head>
  <body>
    <script>
      function displayLocation(latitude,longitude){
        var request = new XMLHttpRequest();

        var method = 'GET';
        var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude+'&sensor=true';
        var async = true;

        request.open(method, url, async);
        request.onreadystatechange = function(){
          if(request.readyState == 4 && request.status == 200){
            var data = JSON.parse(request.responseText);
            var address = data.results[0];
            document.write(address.formatted_address);
          }
        };
        request.send();
      };

      var successCallback = function(position){
        var x = position.coords.latitude;
        var y = position.coords.longitude;
        displayLocation(x,y);
      };

      var errorCallback = function(error){
        var errorMessage = 'Unknown error';
        switch(error.code) {
          case 1:
            errorMessage = 'Permission denied';
            break;
          case 2:
            errorMessage = 'Position unavailable';
            break;
          case 3:
            errorMessage = 'Timeout';
            break;
        }
        document.write(errorMessage);
      };

      var options = {
        enableHighAccuracy: true,
        timeout: 1000,
        maximumAge: 0
      };

      navigator.geolocation.getCurrentPosition(successCallback,errorCallback,options);
    </script>
  </body>
</html>

उपयोगकर्ता अनुमोदन के बिना अक्षांश और देशांतर से उपयोगकर्ता स्थान का पता लगाने का कोई तरीका है?
विकास वर्मा

8
@VikasVerma अगर आपकी सहमति के बिना उपयोगकर्ता स्थान खोजने की अनुमति दी जाती है तो एक गंभीर गोपनीयता भंग होगी
omerio

@omerio धन्यवाद, लेकिन मैंने वहां कोड बनाया, मैंने उपयोगकर्ता को क्लिक करने के लिए मजबूर किया कि क्या वह आगे बढ़ना चाहता है।
विकास वर्मा

1
यह वास्तव में मुझे मेरा सटीक घर का पता दिया। बिल्कुल वही जो मैं चाहता हूँ। मैं शहर और राज्य या ज़िप कोड की तरह कैसे निकालूं?
ydobonebi

6

नोड में। हम लेट्स , लिंग से पता प्राप्त करने के लिए नोड-जियोकोड एनपीएम मॉड्यूल का उपयोग कर सकते हैं ।

geo.js

var NodeGeocoder = require('node-geocoder');

var options = {
  provider: 'google',
  httpAdapter: 'https', // Default
  apiKey: ' ', // for Mapquest, OpenCage, Google Premier
  formatter: 'json' // 'gpx', 'string', ...
};

var geocoder = NodeGeocoder(options);

geocoder.reverse({lat:28.5967439, lon:77.3285038}, function(err, res) {
  console.log(res);
});

उत्पादन:

नोड geo.js

[ { formattedAddress: 'C-85B, C Block, Sector 8, Noida, Uttar Pradesh 201301, India',
    latitude: 28.5967439,
    longitude: 77.3285038,
    extra: 
     { googlePlaceId: 'ChIJkTdx9vzkDDkRx6LVvtz1Rhk',
       confidence: 1,
       premise: 'C-85B',
       subpremise: null,
       neighborhood: 'C Block',
       establishment: null },
    administrativeLevels: 
     { level2long: 'Gautam Buddh Nagar',
       level2short: 'Gautam Buddh Nagar',
       level1long: 'Uttar Pradesh',
       level1short: 'UP' },
    city: 'Noida',
    country: 'India',
    countryCode: 'IN',
    zipcode: '201301',
    provider: 'google' } ]

बहुत स्पष्ट और काम करने वाले फीडबैक के लिए धन्यवाद, क्या 'नोड-जियोकोडर' और '@ @ / मैप्स' की पसंद में कोई अंतर होगा?, वे एक ही काम करते हुए दिखाई देते हैं
Ade

1
दोनों आउटपुट समान हैं लेकिन नोड-जियोकोड को पता प्राप्त करने के लिए सरलीकृत मॉड्यूल है और @ google / मैप्स पते को प्राप्त करने के लिए एपीआई है जिसमें हमें कॉन्फ़िगर करने की आवश्यकता है।
KARTHIKEYAN.A

5

यहाँ Google के जियोकोड वेब सर्विस का नवीनतम नमूना है

https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY

बस YOUR_API_KEYआपको Google जियोकोडिंग एपीआई से मिलने वाली एपीआई कुंजी को बदल दें

पी / एस: जियोकोडिंग एपीआई स्थानों के मानचित्र के अंतर्गत नहीं है ;)


4

यहां एक वादा का उपयोग कर एक आधुनिक समाधान है:

function getAddress (latitude, longitude) {
    return new Promise(function (resolve, reject) {
        var request = new XMLHttpRequest();

        var method = 'GET';
        var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + latitude + ',' + longitude + '&sensor=true';
        var async = true;

        request.open(method, url, async);
        request.onreadystatechange = function () {
            if (request.readyState == 4) {
                if (request.status == 200) {
                    var data = JSON.parse(request.responseText);
                    var address = data.results[0];
                    resolve(address);
                }
                else {
                    reject(request.status);
                }
            }
        };
        request.send();
    });
};

और इसे इस तरह से कॉल करें:

getAddress(lat, lon).then(console.log).catch(console.error);

वादा 'ऑब्जेक्ट' या फिर 'कैच' में एरर स्टेटस कोड का पता देता है।


3
यह एक एक्सेस कुंजी के बिना काम नहीं करेगा। सेंसर पैरामीटर अप्रचलित है
जोरो टेनेव

इसका वास्तव में काम नहीं कर रहा है
प्रोग्रामिंग

3

निम्नलिखित कोड शहर का नाम पाने के लिए ठीक काम करता है ( Google मानचित्र भू एपीआई का उपयोग करके ):

एचटीएमएल

<p><button onclick="getLocation()">Get My Location</button></p>
<p id="demo"></p>
<script src="http://maps.google.com/maps/api/js?key=YOUR_API_KEY"></script>

स्क्रिप्ट

var x=document.getElementById("demo");
function getLocation(){
    if (navigator.geolocation){
        navigator.geolocation.getCurrentPosition(showPosition,showError);
    }
    else{
        x.innerHTML="Geolocation is not supported by this browser.";
    }
}

function showPosition(position){
    lat=position.coords.latitude;
    lon=position.coords.longitude;
    displayLocation(lat,lon);
}

function showError(error){
    switch(error.code){
        case error.PERMISSION_DENIED:
            x.innerHTML="User denied the request for Geolocation."
        break;
        case error.POSITION_UNAVAILABLE:
            x.innerHTML="Location information is unavailable."
        break;
        case error.TIMEOUT:
            x.innerHTML="The request to get user location timed out."
        break;
        case error.UNKNOWN_ERROR:
            x.innerHTML="An unknown error occurred."
        break;
    }
}

function displayLocation(latitude,longitude){
    var geocoder;
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(latitude, longitude);

    geocoder.geocode(
        {'latLng': latlng}, 
        function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (results[0]) {
                    var add= results[0].formatted_address ;
                    var  value=add.split(",");

                    count=value.length;
                    country=value[count-1];
                    state=value[count-2];
                    city=value[count-3];
                    x.innerHTML = "city name is: " + city;
                }
                else  {
                    x.innerHTML = "address not found";
                }
            }
            else {
                x.innerHTML = "Geocoder failed due to: " + status;
            }
        }
    );
}

0

@ संचित गुप्ता के रूप में भी।

इस हिस्से में

if (results[0]) {
 var add= results[0].formatted_address ;
 var  value=add.split(",");
 count=value.length;
 country=value[count-1];
 state=value[count-2];
 city=value[count-3];
 x.innerHTML = "city name is: " + city;
}

बस परिणाम सरणी कंसोल

if (results[0]) {
 console.log(results[0]);
 // choose from console whatever you need.
 var city = results[0].address_components[3].short_name;
 x.innerHTML = "city name is: " + city;
}

0

कई उपकरण उपलब्ध हैं

  1. गूगल मैप्स एपीआई जैसा कि सभी ने लिखा था
  2. इस डेटा का उपयोग करें " https://simplemaps.com/data/world-cities " नि: शुल्क संस्करण डाउनलोड करें और " http://beautifytools.com/excel-to-json-converter.php " जैसे कुछ ऑनलाइन कनवर्टर के साथ JSON में एक्सेल कन्वर्ट करें।
  3. IP पते का उपयोग करें जो अच्छा नहीं है क्योंकि किसी के IP पते का उपयोग करने से उपयोगकर्ता अच्छा नहीं सोच सकते हैं कि आप उन्हें हैक कर सकते हैं।

अन्य मुफ्त और सशुल्क टूल भी उपलब्ध हैं


-1

BigDataCloud ने इसके लिए एक अच्छा API भी दिया है, वो भी नोडज यूजर के लिए।

उनके पास क्लाइंट के लिए एपीआई - मुफ्त है । लेकिन बैकएंड के लिए भी API_KEY (कोटा के अनुसार मुफ़्त) का उपयोग कर।

उनका GitHub पेज

कोड ऐसा दिखता है:

const client = require('@bigdatacloudapi/client')(API_KEY);

async foo() {
    ...
    const location: string = await client.getReverseGeocode({
          latitude:'32.101786566878445', 
          longitude: '34.858965073072056'
    });
}

-1

यदि आप Google जियोकोडिंग एपीआई का उपयोग नहीं करना चाहते हैं तो आप विकास के उद्देश्य से कुछ अन्य फ्री एपीआई का उल्लेख कर सकते हैं। उदाहरण के लिए मैंने स्थान का नाम पाने के लिए [mapquest] API का उपयोग किया।

आप इस निम्नलिखित फ़ंक्शन को लागू करके आसानी से स्थान का नाम प्राप्त कर सकते हैं

 const fetchLocationName = async (lat,lng) => {
    await fetch(
      'https://www.mapquestapi.com/geocoding/v1/reverse?key=API-Key&location='+lat+'%2C'+lng+'&outFormat=json&thumbMaps=false',
    )
      .then((response) => response.json())
      .then((responseJson) => {
        console.log(
          'ADDRESS GEOCODE is BACK!! => ' + JSON.stringify(responseJson),
        );
      });
  };


ओपी Google मैप्स एपीआई के साथ समाधान के लिए पूछ रहा था, मुझे लगता है कि आप सवाल का जवाब नहीं दे रहे हैं।
मिशेल टाकज़ी

क्षमा करें, लेकिन मैंने ऐसा करने का एक वैकल्पिक तरीका सुझाया है। और यह ठीक काम करता है अगर वह गूगल भू कोडिंग एपीआई कुंजी है।
पंकज चतुर्वेदी

-3

आप इसे शुद्ध php और google geocode api के साथ कर सकते हैं

/*
 *
 * @param latlong (String) is Latitude and Longitude with , as separator for example "21.3724002,39.8016229"
 **/
function getCityNameByLatitudeLongitude($latlong)
{
    $APIKEY = "AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // Replace this with your google maps api key 
    $googleMapsUrl = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" . $latlong . "&language=ar&key=" . $APIKEY;
    $response = file_get_contents($googleMapsUrl);
    $response = json_decode($response, true);
    $results = $response["results"];
    $addressComponents = $results[0]["address_components"];
    $cityName = "";
    foreach ($addressComponents as $component) {
        // echo $component;
        $types = $component["types"];
        if (in_array("locality", $types) && in_array("political", $types)) {
            $cityName = $component["long_name"];
        }
    }
    if ($cityName == "") {
        echo "Failed to get CityName";
    } else {
        echo $cityName;
    }
}

1
एक जावास्क्रिप्ट समाधान नहीं
चिंतन पाठक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.