গুগল ম্যাপস জাভাস্ক্রিপ্টের জন্য এপিআই ব্যবহার করে অক্ষাংশ এবং দ্রাঘিমাংশ থেকে কোনও শহরের নাম পাওয়ার কী উপায় আছে?
যদি আমি দয়া করে একটি উদাহরণ দেখতে পারি?
গুগল ম্যাপস জাভাস্ক্রিপ্টের জন্য এপিআই ব্যবহার করে অক্ষাংশ এবং দ্রাঘিমাংশ থেকে কোনও শহরের নাম পাওয়ার কী উপায় আছে?
যদি আমি দয়া করে একটি উদাহরণ দেখতে পারি?
উত্তর:
একে রিভার্স জিওকোডিং বলে
গুগল থেকে ডকুমেন্টেশন:
http://code.google.com/apis/maps/docamentation/geocoding/#ReversGeocoding ।
গুগলের জিওকোড ওয়েব পরিষেবাতে নমুনা কল:
এখানে একটি সম্পূর্ণ নমুনা:
<!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);
});
আউটপুট:
নোড জিও.জেএস
[ { 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' } ]
গুগলের জিওকোড ওয়েব সার্ভিসের সর্বশেষ নমুনা এখানে
https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY
YOUR_API_KEY
আপনি যে এপিআই কীটি পেয়েছেন তা কেবল পরিবর্তন করুনগুগল জিওকোডিং এপিআই পাওয়া এপিআই কীটিতে করুন change
পি / এস: জিওকোডিং এপিআই প্লেস নট ম্যাপস এর অধীনে রয়েছে ;)
এখানে একটি প্রতিশ্রুতি ব্যবহার করে একটি আধুনিক সমাধান:
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);
প্রতিশ্রুতি 'তারপর' এ ঠিকানা বস্তু বা 'ধরা' তে ত্রুটি স্থিতির কোডটি প্রদান করে
নিম্নলিখিত নামটি শহরের নাম ( গুগল ম্যাপ জিও এপিআই ব্যবহার করে ) পেতে সুন্দর কাজ করে:
এইচটিএমএল
<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;
}
অনেকগুলি সরঞ্জাম উপলব্ধ
অন্যান্য নিখরচায় ও প্রদত্ত সরঞ্জামগুলিও উপলভ্য
বিগডাটা ক্লাউডের নোডেজ ব্যবহারকারীদের জন্যও এটির জন্য একটি দুর্দান্ত এপিআই রয়েছে।
তাদের ক্লায়েন্টের জন্য এপিআই রয়েছে - বিনামূল্যে । তবে ব্যাকএন্ডের জন্যও , API_KEY ব্যবহার করে (কোটা অনুসারে বিনামূল্যে)।
কোডটি দেখে মনে হচ্ছে:
const client = require('@bigdatacloudapi/client')(API_KEY);
async foo() {
...
const location: string = await client.getReverseGeocode({
latitude:'32.101786566878445',
longitude: '34.858965073072056'
});
}
যদি আপনি বিকাশের উদ্দেশ্যে গুগল জিওকোডিং এপিআই ব্যবহার না করতে চান তবে আপনি আরও কয়েকটি ফ্রি এপিআই উল্লেখ করতে পারেন। উদাহরণস্বরূপ, আমি অবস্থানটির নাম পাওয়ার জন্য [মানচিত্রের অনুসন্ধান] এপিআই ব্যবহার করেছি।
আপনি নিম্নলিখিত ফাংশনটি প্রয়োগ করে খুব সহজেই অবস্থানের নামটি আনতে পারেন
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),
);
});
};
আপনি খাঁটি পিএইচপি এবং গুগল জিওকোড এপিআই দিয়ে এটি করতে পারেন
/*
*
* @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;
}
}