1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
// Author: Uroš Podkrižnik (17.12.2015)
// Tip vprasanja = 26
// GEOCODING
/**
* pretvorba iz latitude, longitude v berljiv naslov
* funkcija vrne String - results[0] - prvi (najdaljsi naslov)
* @param {type} pos - koordinate - objekt {lat: ???, lng: ???}
* @param {type} callback - function - ker je geocode asinhrona funkcija, se uporabi, da se vrne rezultat
* @returns {undefined}
*/
function GeocodingF(pos, callback) {
geocoder.geocode({'location': pos}, function (results, status) {
// ce je status OK - pridobil informacije o naslovu
if (status === google.maps.GeocoderStatus.OK) {
//console.log(results);//[0]= polni naslov, [1]= Ljubljana, Slovenija,....
if (results[0]) {
//console.log(results[0].formatted_address);
//vrne rezultat (Objekt s polnim naslovom)
callback(results[0]);
} else {
console.log('No results found');
callback(null);
}
}
// ce je prislo do napake
else {
console.log('Geocoder failed due to: ' + status);
if(status == 'ZERO_RESULTS'){
var obj = {formatted_address: ""}
callback(obj);
}
else
callback(null);
}
});
}
/**
* centriranje na zemljevidu (kaj se bo prikazalo na zemljevidu / zajelo v okvir)
* @param {type} centerInMap - String - naslov, ki ga naj zemljevid zajame v okvir
* @param {type} map - mapa/zemljevid
* @returns {undefined}
*/
function centrirajMap (centerInMap, map){
geocoderFromAddress(centerInMap, function(place){
if(place){
map.setCenter(place.geometry.location);
map.fitBounds(place.geometry.viewport);
//povecaj zoom za 1, ker google naredi prevec oddaljeno
//pri vecji povrsini na mapi (npr Slovenija), ne dela ok
//map.setZoom(map.getZoom()+1);
}
});
}
/**
* Geocoding from address to places, in callback only first place is returned
* @param {type} address - address to geocode
* @param {type} callback - callback function to call when place is found
* @returns {undefined}
*/
function geocoderFromAddress(address, callback){
var delay = 100;
var stej_poizvedbe = 0;
geocoder.geocode({'address': address}, function (results, status) {
if (status === google.maps.GeocoderStatus.OK) {
callback(results[0]);
}
//zelo redko pride do tega, recimo ce uporabnik na polno stanca lokacije
else if(status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT){
if(stej_poizvedbe < 10){
setTimeout(geocoderFromAddress(address, callback), delay);
stej_poizvedbe++;
delay += 100;
}
else
console.log('Geocoder error: OVER_QUERY_LIMIT; repeated: '+stej_poizvedbe);
}
//ce ni najdenih rezultatov za vpisan naslov v nastavitvah (fokus)
else if(status === google.maps.GeocoderStatus.ZERO_RESULTS){
alert(lang['srv_branching_no_results_geo_map']+': '+address);
}
else
console.log('Geocoder error: ' + status);
return null;
});
}
|