Puedo pensar en dos opciones posibles.
Primero es posible que desee considerar el uso del GeoLocation API como ceejayoz suggested. Esto es muy fácil de implementar, y es una solución totalmente del lado del cliente. Para centrar el mapa mediante geolocalización, simplemente use:
map.setCenter(new google.maps.LatLng(position.coords.latitude,
position.coords.longitude), 13);
... dentro de la success()
devolución de llamada del método de la localización geográfica getCurrentPosition()
.
Desafortunadamente, solo unos pocos navegadores modernos actualmente admiten la API de GeoLocation. Por lo tanto, también puede considerar usar una solución del lado del servidor para resolver la dirección IP del cliente en la ubicación del usuario, utilizando un servicio como MaxMind's GeoLite City. Luego, simplemente puede geocodificar la ciudad y el país del usuario dentro del navegador, utilizando la API de Google Maps. El siguiente podría ser un breve ejemplo:
<!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>
Sólo tiene que sustituir userLocation = 'London, UK'
con la dirección resuelta del lado del servidor. La siguiente es una captura de pantalla del ejemplo anterior:
puede quitar el marcador mediante la eliminación de la línea map.addOverlay(new GMarker(bounds.getCenter()));
.
La API de geolocalización es la respuesta obvia. Sin embargo, incluso si la API está disponible, puede tomar algo de tiempo en el lado del navegador para obtener una solución de ubicación. Mientras tanto, debes mostrarle al usuario una ubicación temporal y luego mover el mapa una vez que la ubicación esté arreglada. Esto suena como un desafío GUI para que se sienta bien. Me gusta la solución de Daniel Vassallo si una ubicación aproximada es aceptable. Mover el mapa después de que está cargado me parece cuestionable. –