1/*DCM++ © Dominique Cavailhez 2012. 2 * Published under the Clear BSD license. 3 * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full text of the license. */ 4 5/** 6 * @requires OpenLayers/Layer/Vector.js 7 */ 8 9/** 10 * Class: OpenLayers.Control.Editor 11 * Create an editable instance of OpenLayers.Layer.Vector 12 * 13 * Inherits from: 14 * - <OpenLayers.Layer.Vector> 15 */ 16 17OpenLayers.Layer.Editor = OpenLayers.Class(OpenLayers.Layer.Vector, { 18 format: new OpenLayers.Format.GML (), // Format par défaut 19 20 bounds: null, // Bornes cumulées 21 22 initialize: function (name, url, options) { 23 /*if (OpenLayers.BROWSER_NAME == 'msie') { 24 alert ('Editeur non supporté sous Internet Explorer'); 25 return; 26 }*/ 27 OpenLayers.Util.extend (this, options); 28 29 // Initialisation de la stratégie de sauvegarde 30 this.saveStrategy = new OpenLayers.Strategy.Save(); 31 this.saveStrategy.events.register ('success', null, function () { 32 //alert ("Modifications enregistrées"); 33 //if (confirm('Ok -> Enregistrer le tracé\nAnnuler -> Afficher sous VisuGPX')) window.open('http://www.visugpx.com/editgpx/serveur_gml.php5?alt=1','_new'); else window.open('http://www.visugpx.com/editgpx/serveur_gml.php5?alt=1&visugpx=1','_new');this.layer.refresh(); 34 //if (confirm('Ok -> Enregistrer le tracé\nAnnuler -> Afficher sous VisuGPX')) document.location.href='http://www.visugpx.com/editgpx/serveur_gml.php5?alt=1'; else document.location.href='http://www.visugpx.com/editgpx/serveur_gml.php5?alt=1&visugpx=1';this.layer.refresh(); 35 36 this.layer.refresh (); // Va rechercher le résultat sur le serveur et le réaffiche pour être sur qu'on a bien enregistré 37 }); 38 this.saveStrategy.events.register ('fail', null, function () { 39 alert ("Erreur lors de l'enregistrement des modifications"); 40 }); 41 42 43var s = new OpenLayers.StyleMap(); 44 //s.styles['default'].defaultStyle.strokeColor = '#df08f9'; 45 s.styles['default'].defaultStyle.strokeColor = '#fde804'; 46 s.styles['default'].defaultStyle.strokeWidth = 4; 47 s.styles['default'].defaultStyle.cursor = 'pointer'; 48 s.styles.select.defaultStyle.strokeColor = '#df08f9'; 49 s.styles.select.defaultStyle.strokeOpacity = 0.3; 50 51 52 OpenLayers.Layer.Vector.prototype.initialize.call (this, name, { 53 styleMap: s, 54 /* 55 new OpenLayers.StyleMap({ 56 'default': { 57 strokeColor: '#df08f9', 58 strokeWidth: 5, 59 strokeOpacity: 0.7, 60 cursor: 'pointer', 61 fillColor: 'orange', 62 fillOpacity: 0.4, 63 pointRadius: 6 64 }, 65 'select': { 66 strokeOpacity: 0.3 67 } 68 }),*/ 69 70 protocol: new OpenLayers.Protocol.HTTP ({ 71 url: 'http://www.vttrack.fr/404', 72 format: this.format 73 }), 74 strategies: [ 75 this.saveStrategy, 76 new OpenLayers.Strategy.Fixed () 77 ], 78 onFeatureInsert: function () { // Quand la couche est reçue 79 //this.map.zoomToExtent (this.getDataExtent ()); // On recadre à chaque fichier car on ne sait pas dans quel ordre ils sont uploadés 80 } 81 }); 82 }, 83 84 setMap: function(map) { 85 OpenLayers.Layer.Vector.prototype.setMap.apply(this, arguments); 86 87 // add some editing tools to a panel 88/* 89 var panel = new OpenLayers.Control.Panel ({ 90 displayClass: 'olControlEditingToolbar' 91 }); 92 panel.addControls([ 93 94 new OpenLayers.Control.ExtendedNavigation ({ 95 title: "Naviguer sur la carte, utiliser les autres fonctions VTTrack" 96 }), 97 new OpenLayers.Control.VisuGPXSaveFeature ({ 98 layer: this, 99 title: "Sauvegarder le tracé" 100 }), 101 new OpenLayers.Control.VisuGPXViewFeature ({ 102 layer: this, 103 title: "Voir le tracé sur VisuGPX" 104 }), 105 106 new OpenLayers.Control.DeleteFeature (this, { 107 title: 108 "Supprimer une ligne: Cliquer sur la ligne puis accepter" 109 }), 110 new OpenLayers.Control.CutFeature (this, { 111 title: 112 "Supprimer un sommet: Cliquer sur la ligne puis sur le sommet à supprimer\n\n"+ 113 "Couper une ligne en 2: Cliquer sur la ligne puis sur le mileu du segment à supprimer" 114 }), 115 new OpenLayers.Control.ModifyFeature (this, { 116 deleteCodes: [32, 46, 67, 99, 68, 100, 83, 115], 117 title: 118 "Déplacer un sommet: Cliquer sur la ligne, cliquer sur le sommet, maintenir et faire glisser\n\n"+ 119 "Ajouter un sommet à une ligne: Cliquer sur la ligne, cliquer et faire glisser le mileu d un segment\n\n"+ 120 "Supprimer un sommet d une ligne: Cliquer sur la ligne, survoler le sommet à supprimer et apuyer sur S" 121 }), 122 new OpenLayers.Control.DrawFeatureExtended (this, OpenLayers.Handler.Path, { 123 displayClass: 'olControlDrawFeaturePoint', 124 title: 125 "Ajouter une ligne: Cliquer à l'emplacement du début, sur chaque point intermédiaire, double cliquer à la fin\n\n"+ 126 "Etendre une ligne: Cliquer sur une extrémité, sur chaque point intermédiaire, double cliquer à la fin\n\n"+ 127 "Joindre deux lignes: Cliquer sur une extrémité, double cliquer sur l'autre" 128 }) 129 ]); 130 if (!mobile) 131 map.addControl(panel); 132*/ 133 // configure the snapping agent 134 var snap = new OpenLayers.Control.Snapping({layer: this}); 135 map.addControl(snap); 136 snap.activate(); 137 }, 138 139 // On a lu le nom d'un fichier sur le disque 140 // <input type="file" onchange="Editor.onAddFile(this.files)" /> 141 addFiles: function(files) { 142 if (window.FileReader) 143 for (i in files) 144 if (this.file = files[i]) { 145 var fr = new FileReader(); 146 fr.owner = this; // Pour référence dans le callback 147 fr.onload = function (e) {this.owner.addFile (e.target.result)} 148 fr.readAsText (this.file); 149 } else 150 alert ('Failed to load file'); 151 else 152 alert ('FileReader non supporté par cet explorateur'); 153 }, 154 155 // Le contenu du fichier est lu 156 addFile: function (file) { 157 var format = new OpenLayers.Format.GPX({ 158 'internalProjection': this.map.baseLayer.projection, 159 'externalProjection': new OpenLayers.Projection('EPSG:4326') 160 }); 161 var features = format.read(file); 162 if (features) { 163 // On recopie tous les points dans une seule nouvelle ligne pour éviter les points orphelins partout 164 /*var ligne = new OpenLayers.Feature.Vector ( 165 new OpenLayers.Geometry.LineString() 166 ); 167 for (f in features) { 168 var vertices = features[f].geometry.getVertices (); 169 for (v in vertices) 170 ligne.geometry.addComponent (vertices [v].clone ()); // On les insère dans la nouvelle ligne 171 }*/ 172 this.addFeatures (features); 173 /*this.boundsAdded = this.boundsAdded 174 ? this.boundsAdded.extend (ligne.geometry.getBounds()) // On cumule les bornes 175 : ligne.geometry.getBounds();*/ 176 } 177 this.map.zoomToExtent (this.getDataExtent ());
177 // On recadre à chaque fichier car on ne sait pas dans quel ordre ils sont uploadés 178 }, 179 180 CLASS_NAME: "OpenLayers.Layer.Editor" 181});
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.