1var Search = function () { 2 var address = {}; 3 4 function sendRequest(address) { 5 return new Promise(function (resolve, reject) { 6 var service = new google.maps.places.AutocompleteService(); 7 var request = { 8 input: address, 9 types: ['address'], 10 componentRestrictions: {country: ['IT']}, 11 fields: ['name', 'address_components', 'geometry'], 12 }; 13 service.getPlacePredictions(request, function (predictions, status) { 14 if (status !== google.maps.places.PlacesServiceStatus.OK || !predictions) { 15 reject("Indirizzo non trovato!"); 16 } else { 17 let map = new google.maps.Map(document.createElement('div')); 18 let service = new google.maps.places.PlacesService(map); 19 service.getDetails({ 20 placeId: predictions[0].place_id, // Prendo la prima prediction 21 fields: ['name', 'address_components', 'geometry'] 22 }, function (place, status) { 23 if (status === google.maps.places.PlacesServiceStatus.OK) { 24 address = formatAddress(formatPlace(place)); 25 resolve(address); 26 } else { 27 reject("Indirizzo non trovato!"); 28 } 29 }); 30 } 31 }); 32 }); 33 } 34 35 function formatPlace(place) { 36 var res = {}; 37 res['ricerca'] = place.name; 38 place.address_components.forEach(function (element) { 39 if (element.types.includes('route')) { 40 res['indirizzo'] = element.long_name; 41 } else if (element.types.includes('street_number')) { 42 res['civico'] = element.long_name; 43 } else if (element.types.includes('locality')) { 44 res['localita'] = element.long_name; 45 } else if (element.types.includes('administrative_area_level_3')) { 46 res['citta'] = element.long_name; 47 } else if (element.types.includes('administrative_area_level_2')) { 48 res['provincia'] = element.long_name; 49 res['provincia_sigla'] = element.short_name; 50 } else if (element.types.includes('administrative_area_level_1')) { 51 res['regione'] = element.long_name; 52 } else if (element.types.includes('country')) { 53 res['nazione'] = element.long_name; 54 res['nazione_sigla'] = element.short_name; 55 } else if (element.types.includes('postal_code')) { 56 res['cap'] = element.long_name; 57 } 58 }); 59 res['latitudine'] = place.geometry.location.lat(); 60 res['longitudine'] = place.geometry.location.lng(); 61 return res; 62 } 63 64 function formatAddress(address) { 65 var res = address; 66 res['get_indirizzo_formattato'] = function () { 67 var indirizzo_formattato = this.indirizzo; 68 indirizzo_formattato += (this.civico) ? ', ' + this.civico : ''; 69 indirizzo_formattato += (this.cap) ? ', ' + this.cap : ''; 70 indirizzo_formattato += (this.localita) ? ' ' + this.localita : ''; 71 indirizzo_formattato += (this.citta) && (this.citta !== this.localita) ? ' ' + this.citta : ''; 72 indirizzo_formattato += (this.provincia_sigla) ? ' ' + this.provincia_sigla : ''; 73 indirizzo_formattato += (this.nazione) ? ', Italy' : ''; 74 return indirizzo_formattato; 75 } 76 return res; 77 } 78 79 function initSearchAddress(selector, callback_success, callback_error_message) { 80 let autocomplete = new google.maps.places.Autocomplete( 81 $(selector)[0], 82 { 83 types: ['address'], 84 componentRestrictions: {country: ['IT']}, 85 fields: ['name', 'address_components', 'geometry'] 86 } 87 ); 88 google.maps.event.addListener(autocomplete, 'place_changed', function () { 89 var place = autocomplete.getPlace(); 90 if (!place.address_components) { 91 sendRequest(place.name) 92 .then(function (dati) { 93 callback_success(dati); 94 }) 95 .catch(function (err) { 96 $(selector).val(''); 97 callback_error_message(err); 98 }); 99 } else { 100 address = formatAddress(formatPlace(place)); 101 callback_success(address); 102 } 103 }); 104 } 105 106 return { 107 initSearchAddress: initSearchAddress, 108 } 109}();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.