Я пишу код JavaScript с помощью Google Maps API.
map = new google.maps.Map2(document.getElementById("map_canvas"));
map.setCenter(new google.maps.LatLng(37.4419, -122.1419), 13);
Вышеупомянутые кодовые наборы местоположение по умолчанию холста карты в Пало-Альто.
Как мы можем записать сценарий таким путем, которым функция setCenter автоматически указывает к текущему местоположению клиента?
map = new google.maps.Map2(document.getElementById("map_canvas"));
pos = new google.maps.LatLng(37.4419, -122.1419);
map.setCenter(pos, 13);
map.panTo(pos);
Вы можете использовать HTML5 GeoLocation API в браузерах, которые его поддерживают.
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(success, error);
} else {
alert('geolocation not supported');
}
function success(position) {
alert(position.coords.latitude + ', ' + position.coords.longitude);
}
function error(msg) {
alert('error: ' + msg);
}
Я могу придумать два возможных варианта.
Сначала вы можете рассмотреть возможность использования GeoLocation API , как предлагал ceejayoz . Это очень легко реализовать, и это полностью клиентское решение. Чтобы центрировать карту с помощью GeoLocation, просто используйте:
map.setCenter(new google.maps.LatLng(position.coords.latitude,
position.coords.longitude), 13);
... внутри обратного вызова success ()
метода GeoLocation getCurrentPosition ()
.
К сожалению, в настоящее время только несколько современных браузеров поддерживают GeoLocation API. Поэтому вы также можете рассмотреть возможность использования серверного решения для преобразования IP-адреса клиента в местоположение пользователя, используя такую службу, как MaxMind's GeoLite City . Затем вы можете просто геокодировать город и страну пользователя в браузере, используя Google Maps API. В качестве краткого примера можно привести следующее:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps API Geocoding Demo</title>
<script src="http://maps.google.com/maps?file=api&v=2&sensor=false"
type="text/javascript"></script>
</head>
<body onunload="GUnload()">
<div id="map_canvas" style="width: 400px; height: 300px"></div>
<script type="text/javascript">
var userLocation = 'London, UK';
if (GBrowserIsCompatible()) {
var geocoder = new GClientGeocoder();
geocoder.getLocations(userLocation, function (locations) {
if (locations.Placemark) {
var north = locations.Placemark[0].ExtendedData.LatLonBox.north;
var south = locations.Placemark[0].ExtendedData.LatLonBox.south;
var east = locations.Placemark[0].ExtendedData.LatLonBox.east;
var west = locations.Placemark[0].ExtendedData.LatLonBox.west;
var bounds = new GLatLngBounds(new GLatLng(south, west),
new GLatLng(north, east));
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
map.addOverlay(new GMarker(bounds.getCenter()));
}
});
}
</script>
</body>
</html>
Просто замените userLocation = 'London, UK'
разрешенным адресом на стороне сервера. Ниже приведен снимок экрана из приведенного выше примера:
Вы можете удалить маркер, избавившись от строки map.addOverlay (new GMarker (bounds.getCenter ()));
.