Я использую Геокодер Google для нахождения lat координат СПГ для данного адреса.
var geocoder = new google.maps.Geocoder();
geocoder.geocode(
{
'address': address,
'region': 'uk'
}, function(results, status) {
if(status == google.maps.GeocoderStatus.OK) {
lat: results[0].geometry.location.lat(),
lng: results[0].geometry.location.lng()
});
address
переменная взята от поля ввода.
Я хочу искать местоположения только в Великобритании. Я думал то определение 'region': 'uk'
должен быть достаточно, но это не. Когда я ввожу в "Бостоне", это находит Бостон в США, и я хотел тот в Великобритании.
Как ограничить Геокодер для возврата местоположений только из одной страны или возможно из определенного lat диапазона СПГ?
Спасибо
ОБНОВЛЕНИЕ: Этот ответ больше не может быть лучшим подходом.См. Комментарии под ответом для получения более подробной информации.
В дополнение к тому, что Пекка уже предложил , вы можете связать ', UK'
со своим адресом
, как в следующем примере:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps Geocoding only in UK Demo</title>
<script src="http://maps.google.com/maps/api/js?sensor=false"
type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 400px; height: 300px"></div>
<script type="text/javascript">
var mapOptions = {
mapTypeId: google.maps.MapTypeId.TERRAIN,
center: new google.maps.LatLng(54.00, -3.00),
zoom: 5
};
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
var geocoder = new google.maps.Geocoder();
var address = 'Boston';
geocoder.geocode({
'address': address + ', UK'
},
function(results, status) {
if(status == google.maps.GeocoderStatus.OK) {
new google.maps.Marker({
position:results[0].geometry.location,
map: map
});
}
});
</script>
</body>
</html>
Скриншот:
Я считаю, что это очень надежно. С другой стороны, следующий пример показывает, что ни параметр region
, ни параметр bounds
не имеют никакого эффекта в этом случае:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps Geocoding only in UK Demo with Bounds</title>
<script src="http://maps.google.com/maps/api/js?sensor=false"
type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 500px; height: 300px"></div>
<script type="text/javascript">
var mapOptions = {
mapTypeId: google.maps.MapTypeId.TERRAIN,
center: new google.maps.LatLng(50.00, -33.00),
zoom: 3
};
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
var geocoder = new google.maps.Geocoder();
// Define north-east and south-west points of UK
var ne = new google.maps.LatLng(60.00, 3.00);
var sw = new google.maps.LatLng(49.00, -13.00);
// Define bounding box for drawing
var boundingBoxPoints = [
ne, new google.maps.LatLng(ne.lat(), sw.lng()),
sw, new google.maps.LatLng(sw.lat(), ne.lng()), ne
];
// Draw bounding box on map
new google.maps.Polyline({
path: boundingBoxPoints,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2,
map: map
});
// Geocode and place marker on map
geocoder.geocode({
'address': 'Boston',
'region': 'uk',
'bounds': new google.maps.LatLngBounds(sw, ne)
},
function(results, status) {
if(status == google.maps.GeocoderStatus.OK) {
new google.maps.Marker({
position:results[0].geometry.location,
map: map
});
}
});
</script>
</body>
</html>
Согласно документам , параметр региона, похоже, устанавливает только смещение (вместо реального предела в этот регион). Я думаю, когда API не находит точный адрес в Великобритании, он расширяет поиск независимо от того, в какой регион вы вводите.
В прошлом у меня неплохо получалось указывать код страны в адресе (в дополнение к региону). Однако у меня еще не было большого опыта работы с одинаковыми названиями мест в разных странах. Тем не менее, попробовать стоит. Попробуйте
'address': '78 Austin Street, Boston, UK'
, он должен вернуть без адреса (вместо американского Бостона), и
'address': '78 Main Street, Boston, UK'
должен вернуть Бостон в Великобритании, потому что там на самом деле есть главная улица.
Обновление:
Как запретить геокодеру возвращать местоположения только из одной страны или, может быть, из определенного диапазона широты и долготы?
Вы можете установить параметр границы
. См. здесь
Для этого, конечно, нужно будет вычислить прямоугольник британского размера.