summaryrefslogtreecommitdiffstats
path: root/main/survey/js/Maps/Geocoding.js
blob: 836d215ec4b8f812134031b9664623396b9c005b (plain) (blame)
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;
    });
}