वहाँ जावास्क्रिप्ट के लिए गूगल मैप्स एपीआई का उपयोग कर एक अक्षांश और देशांतर बिंदु से एक शहर का नाम पाने के लिए एक रास्ता है?
यदि ऐसा है तो क्या मैं एक उदाहरण देख सकता हूं?
वहाँ जावास्क्रिप्ट के लिए गूगल मैप्स एपीआई का उपयोग कर एक अक्षांश और देशांतर बिंदु से एक शहर का नाम पाने के लिए एक रास्ता है?
यदि ऐसा है तो क्या मैं एक उदाहरण देख सकता हूं?
जवाबों:
इसे Reverse Geocoding कहा जाता है
Google से प्रलेखन:
http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding ।
Google की जिओकोड वेब सेवा के लिए नमूना कॉल:
यहाँ एक पूरा नमूना है:
<!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>
नोड में। हम लेट्स , लिंग से पता प्राप्त करने के लिए नोड-जियोकोड एनपीएम मॉड्यूल का उपयोग कर सकते हैं ।
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' } ]
यहाँ Google के जियोकोड वेब सर्विस का नवीनतम नमूना है
https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY
बस YOUR_API_KEY
आपको Google जियोकोडिंग एपीआई से मिलने वाली एपीआई कुंजी को बदल दें
पी / एस: जियोकोडिंग एपीआई स्थानों के मानचित्र के अंतर्गत नहीं है ;)
यहां एक वादा का उपयोग कर एक आधुनिक समाधान है:
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);
वादा 'ऑब्जेक्ट' या फिर 'कैच' में एरर स्टेटस कोड का पता देता है।
निम्नलिखित कोड शहर का नाम पाने के लिए ठीक काम करता है ( 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;
}
}
);
}
@ संचित गुप्ता के रूप में भी।
इस हिस्से में
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;
}
कई उपकरण उपलब्ध हैं
अन्य मुफ्त और सशुल्क टूल भी उपलब्ध हैं
BigDataCloud ने इसके लिए एक अच्छा API भी दिया है, वो भी नोडज यूजर के लिए।
उनके पास क्लाइंट के लिए एपीआई - मुफ्त है । लेकिन बैकएंड के लिए भी API_KEY (कोटा के अनुसार मुफ़्त) का उपयोग कर।
कोड ऐसा दिखता है:
const client = require('@bigdatacloudapi/client')(API_KEY);
async foo() {
...
const location: string = await client.getReverseGeocode({
latitude:'32.101786566878445',
longitude: '34.858965073072056'
});
}
यदि आप 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),
);
});
};
आप इसे शुद्ध 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;
}
}