Te dejo un ejemplo de una posible solución para guardar las ubicaciones.
Código HTML:
Ver original<!DOCTYPE html>
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> <!-- MAPA -->
<div id="map_canvas" style="width: 600px; height: 600px;"></div> <input type="text" name="ciudad" id="ciudad" /> <button onclick="agregarCiudad();">Agregar
</button>
<!-- funcion para agregar ciudad. La separo porque es sólo ejemplo -->
<script type="text/javascript"> function agregarCiudad(){
showAddress(document.getElementById('ciudad').value);
document.getElementById('ciudad').value = '';
}
<script type="text/javascript"> //variables y objetos globales
var map //mapa
var geocoder; //geocoder
var _path = []; // ruta vacía
var _ciudades = new Array(); // ciudades que se cargaron para guardar
var _poliLinea = new google.maps.Polyline({ //polilinea
path: _path,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2
});
//inicializo
initialize();
function initialize() {
//centrado
var myLatLng = new google.maps.LatLng(37.4419, -122.1419);
//opciones
var mapOptions = {
zoom: 1,
center: myLatLng,
mapTypeId: google.maps.MapTypeId.TERRAIN
};
//geocoder
geocoder = new google.maps.Geocoder();
//creo mapa
map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
//asigno polilinea al mapa
_poliLinea.setMap(map);
//verifico si hay ciudades guardadas en localStorage
if(localStorage['ciudades']){
__ciudad = JSON.parse(localStorage['ciudades']);
//agrego cada ciudad que se guardó
for(i=0;i<__ciudad.length;i++){
showAddress(__ciudad[i]);
}
}
}
function showAddress(s_address) {
var address = s_address;
//busco la direccion dada
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
//centro el mapa en el resultado
map.setCenter(results[0].geometry.location);
//creo marcador
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
//agrego punto a la linea
agregarRuta(results[0].geometry.location)
//guardo la ciudad en LocalStorage
_ciudades.push(results[0].formatted_address);
localStorage['ciudades'] = JSON.stringify(_ciudades);
} else {
alert('Error: ' + status);
}
});
}
function agregarRuta(o_punto){
//creo punto a partir de la dirección dada
var o_LL = new google.maps.LatLng(o_punto.lat(), o_punto.lng())
//agrego el punto al array de la ruta
_path.push(o_LL);
//cargo la nueva ruta en la polilinea
_poliLinea.setPath(_path);
//centro el mapa en el último punto
map.setCenter(o_LL);
//Hago un poco de zoom
map.setZoom(6);
}
Digo posible porque estoy usando una nueva funcionalidad llamada localStorage y JSON.parse() y JSON.stringify(). La primera permite almacenar contenido desde JavaScript en el navegador, el cual estará disponible después cuando yo lo necesite. Su soporte es relativamente bueno:
http://www.html5rocks.com/en/features/storage
Si te fijás en el ejemplo, podés encontrar las líneas que guardan y que restauran lo que se guardo cuando se entre una segunda vez.
La otra opción podría ser usar cookies, pero eso requeriría también usar AJAX para guardar cada ciudad que se agregue en la cookie. Luego, al cargar la página, verificar si existe la cookie y cargar las ciudades que se guardaron.