source: plugins_spip/diogene_complements/diogene_geo/prive/inc-diogene_geo_map.html @ 3698

Last change on this file since 3698 was 3698, checked in by b_b, 11 years ago

tenter de choper le code postale uniquement si l'accuracy > 5 http://groups.google.com.jm/group/google-maps-api/msg/88b138b5458e3124

File size: 4.7 KB
Line 
1<li style="padding:0">
2<div id="diogene_map" style="width:100%;height:350px;overflow:hidden"></div>
3<script type="text/javascript">
4        var initMap_form = function(){
5                jQuery("input[name=lat],input[name=lonx]").unbind();
6
7                if (GBrowserIsCompatible()) {
8                        var lat = jQuery("input[name=lat]").val() ? parseFloat(jQuery("input[name=lat]").val()) : #ENV{lat,#CONFIG{geomap/latitude,0.0}};
9                        var long = jQuery("input[name=lonx]").val() ? parseFloat(jQuery("input[name=lonx]").val()) : #ENV{lonx};
10                        var zoom = jQuery("input[name=zoom]").val() ? parseFloat(jQuery("input[name=zoom]").val()) : #ENV{zoom};
11                        var markerplace = new GLatLng(lat,long);
12                        formMap = new GMap2(document.getElementById("diogene_map"));
13                        formMap.addControl(new GLargeMapControl());
14                        formMap.addControl(new GMapTypeControl());
15                        formMap.setCenter(markerplace);
16                        formMap.setZoom(zoom);
17                        [(#CONFIG{gis/geocoding}|oui)
18                        // reverse geocoding
19                        var geocode = function(lat,lonx) {
20                                var geocoder;
21                                geocoder = new GClientGeocoder();
22                                function showAddress(response) {
23                                        if (!response || response.Status.code != 200) {
24                                                return false;
25                                        } else {
26                                                place = response.Placemark[(#VAL{91}|chr)]0[(#VAL{93}|chr)];
27                                                $("#map_adresse").val(place.address);
28                                                if (place.AddressDetails.Accuracy > 0)
29                                                        $("#pays").val(place.AddressDetails.Country.CountryName);
30                                                if (place.AddressDetails.Accuracy > 0)
31                                                        $("#code_pays").val(place.AddressDetails.Country.CountryNameCode);
32                                                if (place.AddressDetails.Accuracy > 1)
33                                                        $("#region").val(place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName);
34                                                if (place.AddressDetails.Accuracy > 3)
35                                                        $("#ville").val(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName);
36                                                if (place.AddressDetails.Accuracy > 5)
37                                                        $("#code_postal").val(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber);
38                                        }
39                                }
40                                geocoder.getLocations(new GLatLng(lat,lonx), showAddress);
41                        };]
42
43                        // update des inputs du formulaire
44                        var updateInputs = function(lat,long) {
45                                jQuery("input[name=lat]").val(lat);
46                                jQuery("input[name=lonx]").val(long);
47                                [(#CONFIG{gis/geocoding}|oui)
48                                geocode(lat,long);]
49                        };
50
51                        // creer un marker draggable qui declenche updateInputs
52                        var createMarker = function(lat,long) {
53                                var point = new GPoint(parseFloat(long),parseFloat(lat));
54                                marker = new GMarker(point,{draggable:true});
55                                updateInputs(point.y,point.x);
56                                GEvent.addListener(marker, 'dragend', function(){
57                                        var point = marker.getPoint();
58                                        updateInputs(point.lat(),point.lng());
59                                });
60                                markerplace = marker;
61                                return marker;
62                        };
63
64                        formMap.addOverlay(createMarker(lat,long));
65
66                        GEvent.addListener(formMap, "click", function(overlay, point){
67                                formMap.clearOverlays();
68                                if (point) {
69                                        marker = createMarker(point.lat(),point.lng());
70                                        formMap.addOverlay(marker);
71                                        formMap.panTo(point);
72                                        markerplace = marker;
73                                }
74                        });
75
76                        GEvent.addListener(formMap, "zoomend", function(oldlevel, newlevel){
77                                jQuery("input[name=zoom]").val(newlevel);
78                                point = markerplace.getPoint();
79                                formMap.panTo(new GLatLng(point.lat(),point.lng()));
80                        });
81
82                        jQuery("input[name=lat]").change(function(){
83                                formMap.clearOverlays();
84                                var point = marker.getPoint();
85                                var newpoint = createMarker(jQuery("input[name=lat]").val(),point.lng());
86                                formMap.addOverlay(newpoint);
87                                formMap.panTo(newpoint.getLatLng());
88                        });
89                        jQuery("input[name=lonx]").change(function(){
90                                formMap.clearOverlays();
91                                var point = marker.getPoint();
92                                var newpoint = createMarker(point.lat(),jQuery("input[name=lonx]").val());
93                                formMap.addOverlay(newpoint);
94                                formMap.panTo(newpoint.getLatLng());
95                        });
96                        jQuery("#map_adresse").focus(function(){jQuery(this).val("");});
97                        jQuery("#rechercher").css("cursor","pointer").click(function(){
98                                var adresse = jQuery("#map_adresse").attr("value");
99                                var geocoder = new GClientGeocoder();
100                                if (geocoder) {
101                                        geocoder.getLatLng(adresse, function(point) {
102                                                if (!point) {
103                                                        alert(adresse + " not found");
104                                                } else {
105                                                        formMap.setCenter(point);
106                                                        formMap.clearOverlays();
107                                                        formMap.addOverlay(createMarker(point.lat(),point.lng()));
108                                                        jQuery("input[(#VAL{91}|chr)]name=lat[(#VAL{93}|chr)]").val(point.lat());
109                                                        jQuery("input[(#VAL{91}|chr)]name=lonx[(#VAL{93}|chr)]").val(point.lng());
110                                                        jQuery("input[(#VAL{91}|chr)]name=zoom[(#VAL{93}|chr)]").val(formMap.getZoom());
111                                                }
112                                        });
113                                }
114                                return false;
115                        });
116                } else {
117                        alert("Sorry, the Google Maps API is not compatible with this browser");
118                }
119        }
120        jQuery(document).ready(function(){
121                initMap_form();
122                onAjaxLoad(initMap_form);
123        });
124
125</script>
126</li>
Note: See TracBrowser for help on using the repository browser.