Có cách nào để lấy tên thành phố từ vĩ độ và kinh độ bằng cách sử dụng api bản đồ google cho javascript không?Làm thế nào tôi có thể lấy tên thành phố từ một vĩ độ và kinh độ?
Nếu có thể tôi vui lòng xem ví dụ?
Có cách nào để lấy tên thành phố từ vĩ độ và kinh độ bằng cách sử dụng api bản đồ google cho javascript không?Làm thế nào tôi có thể lấy tên thành phố từ một vĩ độ và kinh độ?
Nếu có thể tôi vui lòng xem ví dụ?
này được gọi là Xếp Geocoding
Tài liệu từ Google:
http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding.
Mẫu Gọi tới Dịch vụ geocode Web của Google:
http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true
Tuyệt vời! Tôi đọc về điều này, và bây giờ là hơn quá nhiều truy vấn;) cảm ơn. –
Mỗi địa chỉ IP và mỗi người dùng duy nhất giống nhau nếu bạn đang sử dụng API javascript nhưng nếu bạn đang sử dụng PHP chẳng hạn và bạn cho rằng bạn sẽ đạt đến các giới hạn này, bạn sẽ cần giới hạn yêu cầu 1 mỗi giây hoặc sử dụng máy chủ proxy nhưng hãy cẩn thận với proxy, google không phải là ngu ngốc và bạn không thể búa chúng. Thông tin thêm tại đây: https://developers.google.com/maps/documentation/business/articles/usage_limits –
@Azer http://www.microsoft.com/maps/choose-your-bing-maps-API.aspx – smartcaveman
Đây là một mẫu hoàn chỉnh:
<!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>
Có cách nào để tìm vị trí của người dùng từ vĩ độ và kinh độ mà không có sự chấp thuận của người dùng? –
@VikasVerma sẽ là vi phạm quyền riêng tư nghiêm trọng nếu bạn được phép tìm vị trí của người dùng mà không có sự đồng ý của họ – omerio
@omerio cảm ơn nhưng tôi đã tạo mã ở đó. Tôi buộc người dùng phải nhấp vào cho phép nếu họ muốn tiếp tục. –
Dưới đây là một giải pháp hiện đại sử dụng một lời hứa:
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();
});
};
Và gọi nó là như thế này:
getAddress(lat, lon).then(console.log).catch(console.error);
Lời hứa trả về đối tượng địa chỉ trong 'rồi' hoặc mã trạng thái lỗi trong 'bắt'
Tiếp theo Mã Works Fine để Nhận Tên thành phố (Sử dụng Google Map API Geo):
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>
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;
}
}
);
}
Tương tự như @Sanchit Gupta.
trong phần này
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;
}
chỉ an ủi các kết quả mảng
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;
}
Trong Node.js chúng ta có thể sử dụng nút -geocoder mô-đun NPM để có được địa chỉ từ lat, lng.,
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);
});
đầu ra:
nút 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' } ]
Cảm ơn bạn đã phản hồi rất rõ ràng và làm việc, sẽ có bất kỳ sự khác biệt nào giữa lựa chọn 'nút địa lý' và '@ google/maps' hay không?, Chúng dường như làm điều tương tự mặc dù – Ade
cả đầu ra giống nhau nhưng nút-geocoder được đơn giản hóa mô-đun để có được địa chỉ và @ google/maps là api để có được địa chỉ mà chúng ta cần phải cấu hình. –
bạn sẽ cần phải tìm một dịch vụ web cung cấp dịch vụ này. – Deviland