source: spip-zone/_plugins_/_contenu_editorial_/spipcarto/modeles/map_geosvgwmsfile.html @ 5205

Last change on this file since 5205 was 5205, checked in by bill@…, 15 years ago

retour des squelettes SVG...

File size: 30.9 KB
Line 
1[(#HTTP_HEADER{Content-type: image/svg+xml[; charset=(#CHARSET)]})]
2<<?php echo'?' ?>xml version="1.0"[ encoding="(#CHARSET)"] standalone="no"?>
3<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/SVG/DTD/svg10.dtd">
4<BOUCLE_carte(CARTO_CARTES){id_carto_carte=#ID_MAP}>
5<svg width="100%" height="100%" viewBox="0 0 850 590" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:attrib="http://www.carto.net/attrib" onload="init(evt);" zoomAndPan="enable" encoding="ISO-8859-1">
6        <script type="text/ecmascript" xlink:href="[(#CHEMIN{spipcarto/js/helper_functions.js})]"/>
7        <script type="text/ecmascript" xlink:href="[(#CHEMIN{spipcarto/js/navigation.js})]"/>
8        <script type="text/ecmascript"><![CDATA[
9
10
11/* slider.js */
12//slider properties
13function slider(x1,y1,value1,x2,y2,value2,startVal,sliderGroupId,sliderColor,visSliderWidth,invisSliderWidth,sliderSymb,functionToCall,mouseMoveBool) {
14        this.x1 = x1;
15        this.y1 = y1;
16        this.value1 = value1;
17        this.x2 = x2;
18        this.y2 = y2;
19        this.value2 = value2;
20        this.startVal = startVal;
21        this.value = startVal;
22        this.sliderGroupId = sliderGroupId;
23        this.sliderGroup = document.getElementById(this.sliderGroupId);
24        this.sliderColor = sliderColor;
25        this.visSliderWidth = visSliderWidth;
26        this.invisSliderWidth = invisSliderWidth;
27        this.sliderSymb = sliderSymb;
28        this.functionToCall = functionToCall;
29        this.mouseMoveBool = mouseMoveBool;
30        this.length = toPolarDist((this.x2 - this.x1),(this.y2 - this.y1));
31        this.direction = toPolarDir((this.x2 - this.x1),(this.y2 - this.y1));
32        this.createSlider();
33        this.slideStatus = 0;
34        this.ctm = getTransformToRootElement(this.sliderGroup).inverse();
35}
36
37//create slider
38slider.prototype.createSlider = function() {
39        var mySliderLine = document.createElementNS(svgNS,"line");
40        mySliderLine.setAttributeNS(null,"x1",this.x1);
41        mySliderLine.setAttributeNS(null,"y1",this.y1);
42        mySliderLine.setAttributeNS(null,"x2",this.x2);
43        mySliderLine.setAttributeNS(null,"y2",this.y2);
44        mySliderLine.setAttributeNS(null,"stroke",this.sliderColor);
45        mySliderLine.setAttributeNS(null,"stroke-width",this.invisSliderWidth);
46        mySliderLine.setAttributeNS(null,"opacity","0");
47        mySliderLine.setAttributeNS(null,"id",this.sliderGroupId+"_invisibleSliderLine");
48        mySliderLine.addEventListener("mousedown",this,false);
49        this.sliderGroup.appendChild(mySliderLine);
50        mySliderLine = document.createElementNS(svgNS,"line");
51        mySliderLine.setAttributeNS(null,"x1",this.x1);
52        mySliderLine.setAttributeNS(null,"y1",this.y1);
53        mySliderLine.setAttributeNS(null,"x2",this.x2);
54        mySliderLine.setAttributeNS(null,"y2",this.y2);
55        mySliderLine.setAttributeNS(null,"stroke",this.sliderColor);
56        mySliderLine.setAttributeNS(null,"stroke-width",this.visSliderWidth);
57        mySliderLine.setAttributeNS(null,"id",this.sliderGroupId+"_visibleSliderLine");
58        mySliderLine.setAttributeNS(null,"pointer-events","none");
59        this.sliderGroup.appendChild(mySliderLine);
60        mySliderSymb = document.createElementNS(svgNS,"use");
61        mySliderSymb.setAttributeNS(xlinkNS,"xlink:href","#"+this.sliderSymb);
62        var myStartDistance = this.length - ((this.value2 - this.startVal) / (this.value2 - this.value1)) * this.length;
63        var myPosX = this.x1 + toRectX(this.direction,myStartDistance);
64        var myPosY = this.y1 + toRectY(this.direction,myStartDistance);
65        var myTransformString = "translate("+myPosX+","+myPosY+") rotate(" + Math.round(this.direction / Math.PI * 180) + ")";
66        mySliderSymb.setAttributeNS(null,"transform",myTransformString);
67        mySliderSymb.setAttributeNS(null,"id",this.sliderGroupId+"_sliderSymbol");
68        this.sliderGroup.appendChild(mySliderSymb);
69}
70
71//remove all slider elements
72slider.prototype.removeSlider = function() {
73    var mySliderSymb = document.getElementById(this.sliderGroup+"_sliderSymbol");
74        this.sliderGroup.removeChild(mySliderSymb);
75    var mySliderLine = document.getElementById(this.sliderGroup+"_visibleSliderLine");
76        this.sliderGroup.removeChild(mySliderLine);
77    var mySliderLine = document.getElementById(this.sliderGroup+"_invisibleSliderLine");
78        this.sliderGroup.removeChild(mySliderLine);
79}
80
81//handle events
82slider.prototype.handleEvent = function(evt) {
83        this.drag(evt);
84}
85
86//drag slider
87slider.prototype.drag = function(evt) {
88        var svgroot = document.documentElement;
89        if (evt.type == "mousedown" || (evt.type == "mousemove" && this.slideStatus == 1)) {
90                var myCoords = myMapApp.calcCoord(evt.clientX,evt.clientY);
91                //undo the effect of transformations
92                var mySVGPoint = svgroot.createSVGPoint();
93                mySVGPoint.x = myCoords["x"];
94                mySVGPoint.y = myCoords["y"];
95                mySVGPoint = mySVGPoint.matrixTransform(this.ctm);
96                myCoords["x"] = mySVGPoint.x;
97                myCoords["y"] = mySVGPoint.y;
98       
99                //draw normal line for first vertex
100                var ax = this.x2 - this.x1;
101                var ay = this.y2 - this.y1;
102                //normal vector 1
103                var px1 = parseFloat(this.x1) + ay * -1;
104                var py1 = parseFloat(this.y1) + ax;
105                //normal vector 2
106                var px2 = parseFloat(this.x2) + ay * -1;
107                var py2 = parseFloat(this.y2) + ax;
108                               
109                if (leftOfTest(myCoords["x"],myCoords["y"],this.x1,this.y1,px1,py1) == 0 && leftOfTest(myCoords["x"],myCoords["y"],this.x2,this.y2,px2,py2) == 1) {
110                        if (evt.type == "mousedown" && evt.detail == 1) {
111                                this.slideStatus = 1;
112                                svgroot.addEventListener("mousemove",this,false);
113                                svgroot.addEventListener("mouseup",this,false);
114                        }
115                        myNewPos = intersect2lines(this.x1,this.y1,this.x2,this.y2,myCoords["x"],myCoords["y"],myCoords["x"] + ay * -1,myCoords["y"] + ax);
116                        var myPercentage = toPolarDist(myNewPos['x'] - this.x1,myNewPos['y'] - this.y1) / this.length;
117                        this.value = this.value1 + myPercentage * (this.value2 - this.value1);
118                }
119                else {
120                        var myNewPos = new Array();
121                        if (leftOfTest(myCoords["x"],myCoords["y"],this.x1,this.y1,px1,py1) == 0 && leftOfTest(myCoords["x"],myCoords["y"],this.x2,this.y2,px2,py2) == 0) {
122                                //more than max
123                                this.value = this.value2;
124                                myNewPos['x'] = this.x2;
125                                myNewPos['y'] = this.y2;
126                        }
127                        if (leftOfTest(myCoords["x"],myCoords["y"],this.x1,this.y1,px1,py1) == 1 && leftOfTest(myCoords["x"],myCoords["y"],this.x2,this.y2,px2,py2) == 1) {
128                                //less than min
129                                this.value = this.value1;
130                                myNewPos['x'] = this.x1;
131                                myNewPos['y'] = this.y1;
132                        }
133                }
134                var myTransformString = "translate("+myNewPos['x']+","+myNewPos['y']+") rotate(" + Math.round(this.direction / Math.PI * 180) + ")";
135                document.getElementById(this.sliderGroupId+"_sliderSymbol").setAttributeNS(null,"transform",myTransformString);
136                this.getValue();
137        }
138        if (evt.type == "mouseup" && evt.detail == 1) {
139                if (this.slideStatus == 1) {
140                        this.slideStatus = 2;
141                        svgroot.removeEventListener("mousemove",this,false);
142                        svgroot.removeEventListener("mouseup",this,false);
143                        this.getValue();
144                }
145                this.slideStatus = 0;
146        }
147}
148
149//this code is executed, after the slider is released
150//you can use switch/if to detect which slider was used (use this.sliderGroup) for that
151slider.prototype.getValue = function() {
152        if (this.slideStatus == 1 && this.mouseMoveBool == true) {
153                if (typeof(this.functionToCall) == "function") {
154                        this.functionToCall("change",this.sliderGroupId,this.value);
155                }
156                if (typeof(this.functionToCall) == "object") {
157                        this.functionToCall.getSliderVal("change",this.sliderGroupId,this.value);
158                }
159                if (typeof(this.functionToCall) == "string") {
160                        eval(this.functionToCall+"('change','"+this.sliderGroupId+"',"+this.value+")");
161                }
162        }
163        if (this.slideStatus == 2) {
164                if (typeof(this.functionToCall) == "function") {
165                        this.functionToCall("release",this.sliderGroupId,this.value);
166                }
167                if (typeof(this.functionToCall) == "object") {
168                        this.functionToCall.getSliderVal("release",this.sliderGroupId,this.value);
169                }
170                if (typeof(this.functionToCall) == "string") {
171                        eval(this.functionToCall+"('release','"+this.sliderGroupId+"',"+this.value+")");
172                }
173        }
174}       
175
176//this is to set the value from other scripts
177slider.prototype.setValue = function(value) {
178        var myPercAlLine = (value - this.value1) / (this.value2 - this.value1);
179        this.value = myPercAlLine;
180        var myPosX = this.x1 + toRectX(this.direction,this.length * myPercAlLine);
181        var myPosY = this.y1 + toRectY(this.direction,this.length * myPercAlLine);
182        var myTransformString = "translate("+myPosX+","+myPosY+") rotate(" + Math.round(this.direction / Math.PI * 180) + ")";
183        document.getElementById(this.sliderGroupId+"_sliderSymbol").setAttributeNS(null,"transform",myTransformString);
184}       
185/* slider.js */
186
187
188
189
190/* mapApp.js */ 
191//holds data on window size
192function mapApp() {
193        if (!document.documentElement.getScreenCTM) {
194                //initialize ratio
195                this.resetFactors();
196                //add resize event to document element
197                document.documentElement.addEventListener("SVGResize",this,false);
198        }
199}
200
201mapApp.prototype.handleEvent = function(evt) {
202        if (evt.type == "SVGResize") {
203                this.resetFactors();
204        }
205}
206
207mapApp.prototype.resetFactors = function() {
208        if (!document.documentElement.getScreenCTM) {
209                //case for viewers that don't support .getScreenCTM, such as ASV3
210                //calculate ratio and offset values of app window
211                var viewBoxArray = document.documentElement.getAttributeNS(null,"viewBox").split(" ");
212                var myRatio = viewBoxArray[2]/viewBoxArray[3];
213                if ((window.innerWidth/window.innerHeight) > myRatio) { //case window is more wide than myRatio
214                        this.scaleFactor = viewBoxArray[3] / window.innerHeight;
215                }
216                else { //case window is more tall than myRatio
217                        this.scaleFactor = viewBoxArray[2] / window.innerWidth;
218                }
219                this.offsetX = (window.innerWidth - viewBoxArray[2] * 1 / this.scaleFactor) / 2;
220                this.offsetY = (window.innerHeight - viewBoxArray[3] * 1 / this.scaleFactor) / 2;
221        }
222}
223
224mapApp.prototype.calcCoord = function(coordx,coordy) {
225        var coords = new Array();
226        if (!document.documentElement.getScreenCTM) {
227                //case ASV3 a. Corel
228                coords["x"] = (coordx  - this.offsetX) * this.scaleFactor;
229                coords["y"] = (coordy - this.offsetY) * this.scaleFactor;
230        }
231        else {
232                matrix=document.documentElement.getScreenCTM();
233                coords["x"]= matrix.inverse().a*coordx+matrix.inverse().c*coordy+matrix.inverse().e;
234                coords["y"]= matrix.inverse().b*coordx+matrix.inverse().d*coordy+matrix.inverse().f;
235        }
236        return coords;
237}
238/* mapApp.js */ 
239       
240               
241/* checkbox.js */
242function checkBoxScript(evt,myLayer) { //checkBox for toggling layers an contextMenue
243        var myLayerObj = document.getElementById(myLayer);
244        var myCheckCrossObj = document.getElementById("checkCross"+myLayer);
245        var myCheckCrossVisibility = myCheckCrossObj.getAttributeNS(null,"visibility");
246        //alert ( "chech" + myCheckCrossVisibility );
247        if (evt.type == "click" && evt.detail == 1) {
248                if (myCheckCrossVisibility == "visible") {
249                        myLayerObj.setAttributeNS(null,"visibility","hidden");
250                        myCheckCrossObj.setAttributeNS(null,"visibility","hidden");
251                        //you can do if/else or switch statements to set different actions on activating a checkbox here
252                        //myLayer holds the currentLayer name
253                       
254                }
255                else {
256                        myLayerObj.setAttributeNS(null,"visibility","visible");
257                        myCheckCrossObj.setAttributeNS(null,"visibility","visible");
258                        <BOUCLE_WMS_Check(SITES){titre_mot="WMS"}>
259                        if (myLayer == #ID_SYNDIC) getWMS(#ID_SYNDIC);
260                        </BOUCLE_WMS_Check>
261                }
262        }
263}
264/* checkbox.js */       
265               
266               
267               
268                var myMapApp = new mapApp();
269                var myMainMap;
270                var myRefMapDragger;
271                var myZoomSlider;
272                function init(evt) {
273                        //dynamic layer array that allow loading from database
274                        var dynamicLayers = new Array();
275                        //initialize digiLayers (layers that allow digitizing)
276                        var digiLayers = new Array();
277                        myMainMap = new map("mainMap",[(#CALLAGE|worldfileWidth)],0,0.6,0,"m",true,"coordX","coordY",dynamicLayers,digiLayers,"");
278                        //slider properties: x1,y1,value1,x2,y2,value2,startValue,group in which to build the slider,color of slider
279                        //width of slider of sliderbar,width of invisible slider bar,width of visible slider
280                        myZoomSlider = new slider(710,70,myMainMap.minWidth,710,170,myMainMap.maxWidth,myMainMap.maxWidth,"mapZoomSlider","dimgray",2,10,"sliderSymbol","myRefMapDragger.resizeDragger",true);
281                        //set constraints to draggable rect in reference map
282                        myRefMapDragger = new dragObj("dragRectForRefMap","referenceMap","myDragCross",4750,true,"coordX","coordY",myMainMap);
283                        loadProjectSpecific();
284                }
285                function loadProjectSpecific() {
286                        //adopt width and height of map extent
287                        document.getElementById("myScaleTextW").firstChild.nodeValue = formatNumberString(myMainMap.curWidth.toFixed(myMainMap.nrDecimals)) + myMainMap.units;
288                        document.getElementById("myScaleTextH").firstChild.nodeValue = formatNumberString(myMainMap.curHeight.toFixed(myMainMap.nrDecimals)) + myMainMap.units;
289                       
290                        document.getElementById("spipCartoObj").setAttributeNS(null,"stroke-width",myMainMap.curWidth*0.005);   
291                       
292                        <BOUCLE__OBJ(CARTO_OBJETS){id_carto_carte=#ID_CARTO_CARTE}{par num titre}>
293                        <BOUCLE__M(MOTS){id_carto_objet}{par num titre}{doublons a}>
294                        document.getElementById("spipCarto_#ID_MOT").setAttributeNS(null,"stroke-width",myMainMap.curWidth*0.005);     
295                        </BOUCLE__M>
296                        </BOUCLE__OBJ>
297
298                        // Pour charger un claque WMS ...
299                        <BOUCLE_WMS_evt(SITES){titre_mot="WMS"}>
300                        getWMS(#ID_SYNDIC);
301                        </BOUCLE_WMS_evt>
302                }
303               
304                function openWin (id) {
305                        window.open(url, "info");
306                }
307
308
309                //load usgs/terraserver orthoimage
310                //you have to use full pixel values, otherwise an error appears
311                function getWMS(id) {
312                        // For each WMS server - loop on WMS website with keyword WMS
313                        switch (id){
314                        <BOUCLE_WMS_get(SITES){titre_mot="WMS"}>
315                                case #ID_SYNDIC:
316                                        url = "#URL_SITE";
317                                break;
318                        </BOUCLE_WMS_get>
319                                default : return;
320                        }       
321                       
322                        var myRasterLayer = document.getElementById(id);
323                       
324                        if (myRasterLayer.childNodes.length > 0) {
325                                var oldImage = document.getElementById(id+"Image");
326                                myRasterLayer.removeChild(oldImage);
327                        }
328                       
329                        if (document.getElementById(id).getAttributeNS(null,"visibility") == "visible") {
330                                var myRasterImage = document.createElementNS(svgNS,"image");
331                                myRasterImage.setAttributeNS(null,"x",myMainMap.curxOrig);
332                                myRasterImage.setAttributeNS(null,"y",myMainMap.curyOrig);
333                                myRasterImage.setAttributeNS(null,"width",myMainMap.curWidth);
334                                myRasterImage.setAttributeNS(null,"height",myMainMap.curHeight);
335                                myRasterImage.setAttributeNS(null,"id",id+"Image");
336                                //var myImageUrl = "http://www.sandre.fr/geo/wmszonage?Layers=CIBA&SRS=EPSG:27572&";
337                                var myImageUrl = url;
338
339                                // WMS are supposed to be Version 1.1.1, returning PNG file. No styles applied
340                                myImageUrl += "&transparent=true&version=1.1.1&request=GetMap&service=WMS&BBOX=" + parseInt(myMainMap.curxOrig) + "," + (parseInt(myMainMap.curyOrig + myMainMap.curHeight) * -1);
341                                myImageUrl += "," + parseInt(myMainMap.curxOrig + myMainMap.curWidth) + "," + (parseInt(myMainMap.curyOrig) * -1);
342                                myImageUrl += "&width=" + myMainMap.pixWidth + "&height=" + myMainMap.pixHeight + "&format=image/png&styles=";
343                                myImageUrl  = myImageUrl.replace('&amp;',"&");
344                                myRasterImage.setAttributeNS(xlinkNS,"xlink:href",myImageUrl);
345                                myRasterLayer.appendChild(myRasterImage);
346                        }
347                }               
348
349
350]]></script>
351        <defs>
352        <!-- section for CSS stylesheet definitions -->
353        <!-- you may globally adjust your styles here -->
354        <style type="text/css"><![CDATA[
355        .allText {font-family:Arial;fill:dimgray;}
356        .titleText {font-size:22;font-weight:bold;}
357        .subTitleText {font-size:18;font-weight:bold;}
358        .normalText {font-size:15;}
359        .smallText {font-size:12;}
360        .boldText {font-weight:bold;}
361        .centerText {text-anchor:middle;}
362        .dragRect {fill:lightskyblue;stroke:none;opacity:0.4;}
363        .dragSymbol {stroke:darkblue;}
364        .normalLinestyle {fill:none;stroke:dimgray;}
365        .background {fill:aliceblue;stroke:none;}
366        .darkRectstyle {fill:dimgray;stroke:none;}
367        .nofill {fill:none;}
368        .whitefill {fill:white;}
369        .normalfillcol {fill:dimgray;}
370        .normallinecol {stroke:dimgray;}
371        .nostroke {stroke:none;}
372        .verythinline {stroke-width:1;}
373        .thinline {stroke-width:1.5;}
374        .normalline {stroke-width:2;}
375        .mediumThickLine {stroke-width:5;}
376  ]]></style>
377
378                <INCLURE(carto_style.css)>
379                <INCLURE(carto_symbol.xml)>
380
381
382                <!-- Symbols for checkboxes -->
383                <symbol id="checkBoxRect" overflow="visible">
384                        <rect x="-6" y="-6" width="12" height="12" class="whitefill normallinecol thinline"/>
385                </symbol>
386                <symbol id="checkBoxCross" overflow="visible" class="normallinecol nofill verythinline" pointer-events="none">
387                        <line x1="-5" y1="-5" x2="5" y2="5"/>
388                        <line x1="-5" y1="5" x2="5" y2="-5"/>
389                </symbol>
390                <!-- Symbols for Zoom Magnifyer glasses -->
391                <symbol id="magnifyer" overflow="visible" class="whitefill normalline normallinecol">
392                        <line x1="0" y1="0" x2="-8" y2="20"/>
393                        <circle r="8"/>
394                </symbol>
395                <symbol id="magnifyerZoomOut" overflow="visible" class="whitefill normalline normallinecol">
396                        <use xlink:href="#magnifyer"/>
397                        <line x1="-4" y1="0" x2="4" y2="0" style="stroke:dimgray;stroke-width:2;"/>
398                </symbol>
399                <symbol id="magnifyerZoomIn" overflow="visible">
400                        <use xlink:href="#magnifyer"/>
401                        <line x1="-4" y1="0" x2="4" y2="0" class="whitefill normalline normallinecol"/>
402                        <line x1="0" y1="-4" x2="0" y2="4" class="whitefill normalline normallinecol"/>
403                </symbol>
404                <symbol id="magnifyerFull" overflow="visible">
405                        <use xlink:href="#magnifyer"/>
406                        <text y="4.5" class="allText smallText centerText boldText" pointer-events="none">F</text>
407                </symbol>
408                <symbol id="magnifyerManual" overflow="visible">
409                        <line x1="0" y1="0" x2="-8" y2="20" class="whitefill normalline normallinecol"/>
410                        <circle r="8" class="whitefill normalline normallinecol"/>
411                        <rect x="-3" y="-3" width="6" height="6" class="nofill thinline normallinecol" stroke-dasharray="1.5,1.5"/>
412                </symbol>
413                <symbol id="magnifyerZoomInWo" overflow="visible" class="whitefill normalline normallinecol">
414                        <circle r="8"/>
415                        <line x1="-4" y1="0" x2="4" y2="0"/>
416                        <line x1="0" y1="-4" x2="0" y2="4"/>
417                </symbol>
418                <symbol id="magnifyerZoomOutWo" overflow="visible" class="whitefill normalline normallinecol">
419                        <circle r="8"/>
420                        <line x1="-4" y1="0" x2="4" y2="0" style="stroke:dimgray;stroke-width:2;"/>
421                </symbol>
422                <!-- hand symbol for panning -->
423                <symbol id="symbPan" overflow="visible">
424                        <circle r="9" class="normallinecol normalline whitefill"/>
425                        <path class="normallinecol verythinline nofill" d="M-2 6 C -2.2 2.5 -8.0 -0 -5.7 -1.9 C -4.3 -2.5 -3.3 -0.5 -2.5 0.7 C -3.2 -2.1 -5.5 -5.2 -3.6 -5.8 C -2.1 -6.3 -1.6 -3.6 -1.1 -1.9 C -0.9 -4.2 -1.6 -6.4 -0.2 -6.6 C 1.4 -6.8 0.9 -3 1.1 -1.9 C 1.5 -3.5 1.2 -6.1 2.5 -6.1 C 3.9 -6.1 3.5 -3.2 3.6 -1.6 C 4 -2.9 4.1 -4.3 5.3 -4.4 C 7.3 -3.5 4 2.2 3 6z"/>
426                </symbol>
427                <!-- Symbol for Pan Arrows -->
428                <symbol id="symbArrow" overflow="visible" class="nofill verythinline normallinecol" pointer-events="none">
429                        <polyline points="-3,-5 3,-5 3,1 5,1 0,5 -5,1 -3,1 -3,-5"/>
430                </symbol>
431                <!-- Symbol for Recentering Map -->
432                <symbol id="symbRecenter" overflow="visible">
433                        <circle r="9" class="normallinecol normalline whitefill"/>
434                        <circle class="normalfillcol nostroke" cx="0" cy="0" r="1" pointer-events="none"/>
435                        <g class="normallinecol thinline nofill" pointer-events="none">
436                                <line x1="-7" y1="-7" x2="-3" y2="-3"/>
437                                <line x1="7" y1="7" x2="3" y2="3"/>
438                                <line x1="-7" y1="7" x2="-3" y2="3"/>
439                                <line x1="7" y1="-7" x2="3" y2="-3"/>
440                        </g>
441                </symbol>
442                <!-- Symbol for Slider -->
443                <symbol id="sliderSymbol" overflow="visible" class="nofill mediumThickLine normallinecol" pointer-events="none">
444                        <line x1="0" y1="-5" x2="0" y2="5"/>
445                </symbol>
446                <!-- Symbol for Dragging if zoomed in far -->
447                <symbol id="myDragCrossSymbol" overflow="visible" stroke-width="2000" class="nofill dragSymbol" pointer-events="none">
448                        <line x1="-7000" y1="0" x2="-2500" y2="0"/>
449                        <line x1="7000" y1="0" x2="2500" y2="0"/>
450                        <line x1="0" y1="-3300" x2="0" y2="-7800"/>
451                        <line x1="0" y1="3300" x2="0" y2="7800"/>
452                </symbol>
453                <!-- Marker for Extent-Arrows -->
454                <marker id="myStartArrow" overflow="visible" orient="auto">
455                        <polyline class="nostroke normalfillcol" points="-0.5,0 8,-2 8,2"/>
456                </marker>
457                <marker id="myEndArrow" overflow="visible" orient="auto">
458                        <polyline class="nostroke normalfillcol" points="0.5,0 -8,-2 -8,2"/>
459                </marker>
460                <linearGradient id="MyGradient" gradientTransform="rotate(45)"> 
461                        <stop offset="0%" style="stop-color:white"/> 
462                        <stop offset="30%" style="stop-color:red"/> 
463                        <stop offset="100%" style="stop-color:black"/> 
464                </linearGradient> 
465
466
467        </defs>
468        <rect x="-500" y="-500" width="3000" height="[(#CALLAGE|getPropMapHeight{3000})]" stroke="none" class="background" />
469       
470       
471        <!-- Main Map Frame -->
472        <svg id="mainMap" x="0" y="15" viewBox="[(#CALLAGE|worldfileLRX)] [(#CALLAGE|worldfileULY)] [(#CALLAGE|worldfileWidth)] [(#CALLAGE|worldfileHeight)]" width="553" height="[(#CALLAGE|getPropMapHeight{553})]">
473                <!-- this group is necessary for manual panning, it temporarily gets a translate transformation which is later removed on mouseup -->
474                <g id="mainMapGroup" transform="translate(0,0)">
475                        <!-- within this group you should place all map layers, usually, if you have more than one element in a map layer, you would use a group instead of a single element, as in this example -->
476                        <!-- Background image from spip-carto map -->
477                        <image id="ShadedRelief" x="[(#CALLAGE|worldfileLRX)]" y="[(#CALLAGE|worldfileULY)]" width="[(#CALLAGE|worldfileWidth)]px" height="[(#CALLAGE|worldfileHeight)]px" xlink:href="#URL_SITE_SPIP/spip_carto.php?fond_carte=[(#URL_CARTE|base64_encode)][&amp;scale=(#ENV{scale})][&amp;x=(#ENV{x})][&amp;y=(#ENV{y})]" />
478                       
479                        <!-- Background WMS -->
480                        // For each WMS server - loop on WMS website with keyword WMS
481                        <BOUCLE_WMS_layer(SITES){titre_mot="WMS"}>
482                                <g id="#ID_SYNDIC" visibility="hidden" />
483                        </BOUCLE_WMS_layer>
484               
485                        <BOUCLE_OBJ(CARTO_OBJETS){id_carto_carte=#ID_CARTO_CARTE}{par num titre}>
486                         <BOUCLE_M(MOTS){id_carto_objet}{par num titre}{doublons b}>
487                         <!-- #DESCRIPTIF -->
488                                <g id="spipCarto_#ID_MOT">
489                                <BOUCLE_OBJECT(CARTO_OBJETS){id_carto_carte=#ID_CARTO_CARTE}{id_mot}{doublons obj}>
490                                        <a target='new' xlink:href='[(#URL_OBJET|entites_html)]'><[(#GEOMETRIE|wkt2shape{SVGGEO})] [(#GEOMETRIE|wkt2coords{SVGGEO,#CALLAGE,#URL_CARTE,#_M:DESCRIPTIF})] onmouseover="statusChange('#TEXTE');" class="[(#GEOMETRIE|wkt2shape{SVGGEO})[(#_M:DESCRIPTIF)]]"/></a>
491                                </BOUCLE_OBJECT>
492                                </g>
493                         </BOUCLE_M>
494                        </BOUCLE_OBJ>
495                        <g id="spipCartoObj">
496                       
497                                <!-- Couche d'objets SPIP -->
498                                <B_objets>
499                                <BOUCLE_objets(CARTO_OBJETS){id_carto_carte=#ID_CARTO_CARTE}{doublons obj}>
500                                <a target='new' xlink:href='[(#URL_OBJET|entites_html)]'><[(#GEOMETRIE|wkt2shape{SVG})] [(#GEOMETRIE|wkt2coords{SVG,#CALLAGE,#URL_CARTE})] onmouseover="statusChange('#TEXTE');" class="[(#GEOMETRIE|wkt2shape{SVG})]"/></a>
501                                </BOUCLE_objets>
502                                </B_objets>     
503                        </g>
504                </g>
505        </svg>
506       
507       
508       
509        <!-- this group holds navigation, title and if you like, legend information -->
510        <g>
511                <!-- your map title -->
512                <text class="allText titleText" x="580" y="30">#TITRE</text>
513                <!-- coordinate display -->
514                <g class="allText normalText">
515                        <text id="coordX" x="730" y="145">X:</text>
516                        <text id="coordY" x="730" y="160">Y:</text>
517                </g>
518                <!-- display width and height of map extent -->
519                <g>
520                        <!-- vertical line, displays current height of map extent -->
521                        <line class="normalLinestyle" style="stroke-width:1.5;marker-start:url(#myStartArrow);marker-end:url(#myEndArrow);" x1="561" y1="15" x2="561" y2="[(#CALLAGE|getPropMapHeight{575})]"/>
522                        <rect class="background" x="555" y="[(#CALLAGE|getPropMapHeight{230})]" width="12" height="100"/>
523                        <text id="myScaleTextH" class="allText normalText centerText" transform="translate(556,[(#CALLAGE|getPropMapHeight{280})]),rotate(90)">81,000 m</text>
524                        <!-- horizontal line, displays current width of map extent -->
525                        <line class="normalLinestyle" style="stroke-width:1.5;marker-start:url(#myStartArrow);marker-end:url(#myEndArrow);" x1="0" y1="[(#CALLAGE|getPropMapHeight{583})]" x2="553.1" y2="[(#CALLAGE|getPropMapHeight{583})]"/>
526                        <rect class="background" x="236" y="[(#CALLAGE|getPropMapHeight{580})]" width="100" height="12"/>
527                        <text id="myScaleTextW" class="allText normalText centerText" transform="translate(277,[(#CALLAGE|getPropMapHeight{590})])">64,000 m</text>
528                        <!-- small rectangle in lower right corner, onclick displays current map extent in real world coordinates -->
529                        <rect class="darkRectstyle" x="558.5" y="[(#CALLAGE|getPropMapHeight{580})]" width="5" height="5" onclick="showExtent()" />
530                </g>
531                <!-- control map layer visibility with checkBoxes -->
532                <g transform="translate(590 225)">
533                        <text class="allText subTitleText" x="-10" y="0">Calques :</text>
534                       
535                        <!-- checkbox -->
536                        <BOUCLE_OBJ2(CARTO_OBJETS){id_carto_carte=#ID_CARTO_CARTE}{par num titre}>
537                         <BOUCLE_M2(MOTS){id_carto_objet}{par num titre}{doublons c}>
538                                <g transform="translate(0 [(#ID_MOT|plus{20})])">
539                                        <use id="checkBoxspipCarto_#ID_MOT" xlink:href="#checkBoxRect" onclick="checkBoxScript(evt,'spipCarto_#ID_MOT');"/>
540                                        <use id="checkCrossspipCarto_#ID_MOT" xlink:href="#checkBoxCross" visibility="visible"/>
541                                </g>
542                                <g class="allText normalText">
543                                        <text x="12" y="[(#ID_MOT|plus{6})]">#TITRE</text>';
544                                </g>
545                         </BOUCLE_M2>
546                        </BOUCLE_OBJ2>
547
548
549                       
550                        <BOUCLE_WMS_guick(SITES){titre_mot="WMS"}{par nom_site}>
551                                <g transform="translate(0 [(#COMPTEUR_BOUCLE|plus{20})])">
552                                <use id="checkBox#ID_SYNDIC" xlink:href="#checkBoxRect" visibility="visible"
553                                onclick="checkBoxScript(evt,'#ID_SYNDIC');"/>
554                                <use id="checkCross#ID_SYNDIC" xlink:href="#checkBoxCross" 
555                                visibility="hidden"/>
556                                </g>
557                                <g class="allText normalText">
558                                <text x="12" y="[(#COMPTEUR_BOUCLE|plus{6})]">[(#NOM_SITE|supprimer_numero)]</text>
559                                </g>
560                        </BOUCLE_WMS_guick>
561                       
562                        <!-- first checkbox -->
563                        <g transform="translate(0 [(#COMPTEUR_BOUCLE|plus{20})])">
564                                <use id="checkBoxspipCartoObj" xlink:href="#checkBoxRect" onclick="checkBoxScript(evt,'spipCartoObj');"/>
565                                <use id="checkCrossspipCartoObj" xlink:href="#checkBoxCross" visibility="visible"/>
566                        </g>
567                        <!-- second checkbox -->
568                        <g transform="translate(0 [(#COMPTEUR_BOUCLE|plus{40})])">
569                                <use id="checkBoxShadedRelief" xlink:href="#checkBoxRect" onclick="checkBoxScript(evt,'ShadedRelief');"/>
570                                <use id="checkCrossShadedRelief" xlink:href="#checkBoxCross" visibility="visible"/>
571                        </g>
572                       
573                        <!-- checkbox text labels -->
574                        <g class="allText normalText">
575                                <text x="12" y="[(#COMPTEUR_BOUCLE|plus{26})]">Objets cartographiques</text>
576                                <text x="12" y="[(#COMPTEUR_BOUCLE|plus{46})]">Image de fond</text>
577                                               
578                        </g>
579                       
580                       
581                       
582                </g>
583                <!-- map impressum and status Bar -->
584                <g text-rendering="optimizeLegibility">
585                        <!-- text with this id is required to show help texts -->
586                        <text id="statusText" class="allText smallText" x="1" y="[(#CALLAGE|getPropMapHeight{600})]">Info: </text>
587                        <text class="allText smallText" x="1" y="[(#CALLAGE|getPropMapHeight{620})]">Auteur: spip-carto, 2004</text>
588                        <text class="allText smallText" x="510" y="[(#CALLAGE|getPropMapHeight{620})]">Source: </text>
589                </g>
590        </g>
591        <!-- small reference map, shares the same coordinate system than the main map -->
592        <svg id="referenceMap" x="580" y="45" viewBox="[(#CALLAGE|worldfileLRX)] [(#CALLAGE|worldfileULY)] [(#CALLAGE|worldfileWidth)] [(#CALLAGE|worldfileHeight)]" width="118.52" height="[(#CALLAGE|getPropMapHeight{118.52})]" onmousedown="myRefMapDragger.drag(evt)" onmousemove="myRefMapDragger.drag(evt)" onmouseup="myRefMapDragger.drag(evt)" onmouseout="myRefMapDragger.drag(evt)">
593                <image id="ShadedRelief" x="[(#CALLAGE|worldfileLRX)]" y="[(#CALLAGE|worldfileULY)]" width="[(#CALLAGE|worldfileWidth)]" height="[(#CALLAGE|worldfileHeight)]" xlink:href="#URL_SITE_SPIP/spip_carto.php?fond_carte=[(#URL_CARTE|base64_encode)][&amp;scale=(#ENV{scale})][&amp;x=(#ENV{x})][&amp;y=(#ENV{y})]" />
594                <path pointer-events="none" style="fill:none;stroke:salmon;stroke-width:1000" d="M250528.8 -4218899.3l2380.5 -1305.3l1593.4 928.3l1326.1 -752.7l4218.1 -70.2l4072.3 -3965.5l5552.8 -1556.9l313 -1368.6l3042.8 -2535.6l1098.2 945.4l124.7 2135.2l2579.4 431.2l-22.8 1238l3516.2 779.5l-66.6 -1725.9l1001.7 -419l625.5 2735.2l1659.5 476.6l-330.2 1248.2l1330.8 747.9l-583.6 1341.1l1261.8 -103.1l285.3 729.8l1411.9 -2540.5l552.1 995.2l2360 129.9l1432.7 1622l2981.7 1123.5l2940.7 4333.1l-270.6 1128.2l792.4 1201.5l-1726.7 5827.8l785 2018.2l2160 2274.1l2083.2 772.6l-29.7 1587l2579.8 273.2l2903.1 2611.6l-1211.6 1736.7l-304 2424.3l1806.8 664.5l-952.3 432.8l228.8 1126.8l-1164.6 1204.8l1028.8 823.8l134.5 1768.4l-3601.7 2856.7l-1067.8 2250.5l-1294 1012.3l939.2 1643.7l-426.7 1493.5l-1730.1 1237.5l-1330.5 3254.3l-3443.5 3823l-1377.3 499.3l-1732.6 -647.3l-2658.4 9242.1l-2580.3 -63.8l-1626.7 1640.8l-11817 92.4l-111.4 4297.6l-745.7 11.6l-6670.9 -270.2l-1972.9 -5940.7l-1565.6 -523.5l821.7 -7022.1l-765 -27.8l26.9 -795.4l742.7 19.8l74.1 -825.8l-2396.2 -52l748.7 -3186.1l-3846.4 -78l60.9 -5551.1l-1599 -53.4l110.1 -3306.4l-6584.6 -269.6l-573.6 -4908.1l-895.7 -69.6l-3.4 -3096.9l2384.7 -772.2l99.6 -1566.5l1598.9 3l268.3 -6583.2l-5123.5 -132.5l183.9 -10111.9l1168.6 -4214.1l-716.7 -975.6l1461.4 -2002.8l-593.4 -565.8l2659.9 -3238.9z" />
595                <!-- rectangle that represents map extent -->
596                <rect id="dragRectForRefMap" class="dragRect" x="[(#CALLAGE|worldfileLRX)]" y="[(#CALLAGE|worldfileULY)]" width="[(#CALLAGE|worldfileWidth)]" height="[(#CALLAGE|worldfileHeight)]" pointer-events="none"/>
597                <!-- if zoomed in very far, we display a cross-symbol here to indicate the map position in the reference map -->
598                <use id="myDragCross" x="[(#CALLAGE|worldfileLRX)]" y="-[(#CALLAGE|worldfileHeight)]" xlink:href="#myDragCrossSymbol" visibility="hidden" />
599        </svg>
600        <!-- this group holds symbol instances for navigation tools -->
601        <g>
602                <!-- empty group where zoomSlider is later appended -->
603                <g id="mapZoomSlider"/>
604                <text class="allText subTitleText" x="735" y="55">Localisation</text>
605                <!-- button for zoom-in, above slider -->
606                <use x="710" y="55" xlink:href="#magnifyerZoomInWo" onclick="zoomIt(evt,'in');" onmouseover="magnify(evt,1.2,'in');" onmouseout="magnify(evt,1,'in');"/>
607                <!-- button for zoom-out, below slider -->
608                <use x="710" y="185" xlink:href="#magnifyerZoomOutWo" onclick="zoomIt(evt,'out');" onmouseover="magnify(evt,1.2,'out');" onmouseout="magnify(evt,1,'out');"/>
609                <!-- button for full view (f) -->
610                <use x="740" y="85" xlink:href="#magnifyerFull" onclick="zoomIt(evt,'full');" onmouseover="magnify(evt,1.2,'full');" onmouseout="magnify(evt,1,'full');"/>
611                <!-- button for manual zoom (rectangle) -->
612                <use x="770" y="85" xlink:href="#magnifyerManual" onclick="myMainMap.zoomManual(evt)" onmouseover="magnify(evt,1.2,'manual');" onmouseout="magnify(evt,1,'manual');"/>
613                <!-- button for manual pan -->
614                <use x="800" y="85" xlink:href="#symbPan" onclick="myMainMap.panManual(evt)" onmouseover="magnify(evt,1.2,'panmanual');" onmouseout="magnify(evt,1,'panmanual');"/>
615                <!-- button for redefining map center -->
616                <use xlink:href="#symbRecenter" x="830" y="85" onmouseover="magnify(evt,1.2,'recenter')" onmouseout="magnify(evt,1,'recenter')" onclick="myMainMap.recenter(evt)"/>
617        </g>
618</svg>
619</BOUCLE_carte>
620
Note: See TracBrowser for help on using the repository browser.