Javascript için google maps api'yi kullanarak bir enlem ve boylam noktasından şehir adı almanın bir yolu var mı?
Öyleyse lütfen bir örnek görebilir miyim?
Javascript için google maps api'yi kullanarak bir enlem ve boylam noktasından şehir adı almanın bir yolu var mı?
Öyleyse lütfen bir örnek görebilir miyim?
Yanıtlar:
Buna Ters Coğrafi Kodlama denir
Google'dan belgeler:
http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding .
Google'ın coğrafi kod Web Hizmetine Örnek Çağrı:
İşte tam bir örnek:
<!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>
Node.js'de , enlem, lng'den adres almak için node- geocoder npm modülünü kullanabiliriz.
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);
});
çıktı:
düğüm 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' } ]
İşte Google'ın coğrafi kod Web Hizmetinin en son örneği
https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY
Google Geocoding API'denYOUR_API_KEY
aldığınız API anahtarını değiştirmeniz yeterlidir
P / S: Geocoding API , Places NOT Maps altında ;)
İşte bir söz kullanan modern bir çözüm:
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();
});
};
Ve şöyle diyelim:
getAddress(lat, lon).then(console.log).catch(console.error);
Söz, 'o zaman' adres nesnesini veya 'yakala' içindeki hata durum kodunu döndürür
Aşağıdaki Kod Şehir Adını Almak İçin İyi Çalışır ( Google Map Geo API Kullanarak ):
HTML
<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>
SENARYO
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;
}
}
);
}
@Sanchit Gupta ile aynı.
bu bölümde
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;
}
sadece sonuç dizisini konsolide et
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;
}
Mevcut birçok araç var
diğer ücretsiz ve ücretli araçlar da mevcuttur
BigDataCloud ayrıca nodejs kullanıcıları için de güzel bir API'ye sahiptir.
istemci için API'ye sahip değiller . Ama aynı zamanda arka uç için API_KEY kullanarak (kotaya göre ücretsiz).
kod şöyle görünür:
const client = require('@bigdatacloudapi/client')(API_KEY);
async foo() {
...
const location: string = await client.getReverseGeocode({
latitude:'32.101786566878445',
longitude: '34.858965073072056'
});
}
Google coğrafi kodlama API'sini kullanmak istemiyorsanız, geliştirme amacıyla diğer birkaç Ücretsiz API'ye başvurabilirsiniz. örneğin konum adını almak için [mapquest] API kullandım.
Bu aşağıdaki işlevi uygulayarak konum adını kolayca alabilirsiniz
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),
);
});
};
bunu saf php ve google geocode api ile yapabilirsiniz
/*
*
* @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;
}
}