var geocoder;
var map;
var marker;
// initialise the google maps objects, and add listeners
function gmaps_init(){
// center of the universe
var latlng = new google.maps.LatLng(45.5620941,8.05883510000001);
var options = {
zoom: 10,
center: latlng,
scrollwheel: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// create our map object
map = new google.maps.Map(document.getElementById("gmaps-canvas"), options);
// the geocoder object allows us to do latlng lookup based on address
geocoder = new google.maps.Geocoder();
// the marker shows us the position of the latest address
marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(45.5620941,8.05883510000001),
draggable: true
});
// event triggered when marker is dragged and dropped
google.maps.event.addListener(marker, 'dragend', function() {
geocode_lookup( 'latLng', marker.getPosition());
});
// event triggered when map is clicked
google.maps.event.addListener(map, 'click', function(event) {
marker.setPosition(event.latLng)
geocode_lookup( 'latLng', event.latLng);
});
$('#gmaps-error').hide();
}
// move the marker to a new position, and center the map on it
function update_map( geometry ) {
map.fitBounds( geometry.viewport )
marker.setPosition( geometry.location )
geocode_lookup( 'latLng', marker.getPosition() );
}
// fill in the UI elements with new position data
function update_ui( address, latLng ) {
$('#gmaps-input-address').autocomplete("close");
$('#gmaps-input-address').val(address);
//alert(latLng.lat());
$('#latitudine').val(latLng.lat());
$('#longitudine').val(latLng.lng());
}
// Query the Google geocode object
//
// type: 'address' for search by address
// 'latLng' for search by latLng (reverse lookup)
//
// value: search query
//
// update: should we update the map (center map and position marker)?
function geocode_lookup( type, value, update ) {
// default value: update = false
update = typeof update !== 'undefined' ? update : false;
request = {};
request[type] = value;
geocoder.geocode(request, function(results, status) {
$('#gmaps-error').html('');
$('#gmaps-error').hide();
if (status == google.maps.GeocoderStatus.OK) {
// Google geocoding has succeeded!
if (results[0]) {
// Always update the UI elements with new location data
var arrAddress = results[0].address_components;
// alert (results[0].formatted_address);
update_ui(results[0].formatted_address, results[0].geometry.location)
var via='';
var civico='';
var cap='';
var localita='';
var comune='';
var provincia='';
var regione='';
// iterate through address_component array
$.each(arrAddress, function (i, address_component)
{
if (address_component.types[0] == "administrative_area_level_3")
{
comune=address_component.long_name;
}
if (address_component.types[0] == "administrative_area_level_2")
{
provincia=address_component.long_name;
}
if (address_component.types[0] == "locality")
{
localita=address_component.long_name;
}
if (address_component.types[0] == "administrative_area_level_1")
{
regione=address_component.long_name;
}
if (address_component.types[0] == "route")
{
via=address_component.long_name;
}
if (address_component.types[0] == "street_number")
{
civico=address_component.long_name;
}
if (address_component.types[0] == "postal_code")
{
cap=address_component.long_name;
}
// $('#indirizzo').val(via);
// $('#civico').val(civico);
// $('#comune').val(comune);
// $( "#comune" ).autocomplete( "search", comune );
/* var mostrato= false
$( "#comune" ).on( "autocompletesearch", function( event, ui ) {
//
var selectedObj = ui.item;
if (mostrato === false)
{
alert(JSON.stringify(ui));
alert(selectedObj.value);
mostrato=true
}
} );
*/
// $('#comune').data('ui-autocomplete')._trigger('select', 'autocompleteselect', {item:{value:comune}});
$('#cap').val(cap);
if (comune==="")
{
comune=localita;
}
else
{
if (comune===localita)
{
localita='';
}
}
$('#localita').val(localita);
});
// Only update the map (position marker and center map) if requested
if( update ) { update_map( results[0].geometry ) }
} else {
// Geocoder status ok but no results!?
$('#gmaps-error').html("Errore di connessione, prova di nuovo");
$('#gmaps-error').show();
}
} else {
// Google Geocoding has failed. Two common reasons:
// * Address not recognised (e.g. search for 'zxxzcxczxcx')
// * Location doesn't map to address (e.g. click in middle of Atlantic)
if( type == 'address' ) {
// User has typed in an address which we can't geocode to a location
$('#gmaps-error').html("Mi spiace, google non trova " + value + ". Prova un nome nelle vicinanze..." );
$('#gmaps-error').show();
} else {
// User has clicked or dragged marker to somewhere that Google can't do a reverse lookup for
// In this case we display a warning, clear the address box, but fill in LatLng
$('#gmaps-error').html("Troppo approssimativo, magari sei sperduto nei boschi o in acqua :)" );
$('#gmaps-error').show();
update_ui('', value)
}
};
});
};
// initialise the jqueryUI autocomplete element
function autocomplete_init() {
$("#gmaps-input-address").autocomplete({
// source is the list of input options shown in the autocomplete dropdown.
// see documentation: http://jqueryui.com/demos/autocomplete/
source: function(request,response) {
// the geocode method takes an address or LatLng to search for
// and a callback function which should process the results into
// a format accepted by jqueryUI autocomplete
geocoder.geocode( {'address': request.term }, function(results, status) {
response($.map(results, function(item) {
return {
label: item.formatted_address, // appears in dropdown box
value: item.formatted_address, // inserted into input element when selected
geocode: item // all geocode data: used in select callback event
}
}));
})
},
// event triggered when drop-down option selected
select: function(event,ui){
update_ui( ui.item.value, ui.item.geocode.geometry.location )
update_map( ui.item.geocode.geometry )
}
});
// triggered when user presses a key in the address box
$("#gmaps-input-address").bind('keydown', function(event) {
if(event.keyCode == 13) {
geocode_lookup( 'address', $('#gmaps-input-address').val(), true );
// ensures dropdown disappears when enter is pressed
$('#gmaps-input-address').autocomplete("disable")
} else {
// re-enable if previously disabled above
$('#gmaps-input-address').autocomplete("enable")
}
});
}; // autocomplete_init
$(document).ready(function() {
if( $('#gmaps-canvas').length ) {
gmaps_init();
autocomplete_init();
};
$("#moveMarker").click(function() {
var lat = parseFloat(document.getElementById("latitudine").value);
var lng = parseFloat(document.getElementById("longitudine").value);
var newLatLng = new google.maps.LatLng(lat, lng);
marker.setPosition(newLatLng);
map.setCenter(newLatLng);
geocode_lookup( 'latLng', newLatLng);
});
});