Ticket #1039: format.4.patch
| File format.4.patch, 13.0 kB (added by crschmidt, 1 year ago) |
|---|
-
lib/OpenLayers/Format/GeoJSON.js
old new 238 238 // deal with bad coordinates 239 239 throw err; 240 240 } 241 if (this.internalProjection && this.externalProjection) { 242 geometry.transform(this.externalProjection, 243 this.internalProjection); 244 } 241 245 return geometry; 242 246 }, 243 247 … … 548 552 * {Object} An object representing the geometry. 549 553 */ 550 554 'geometry': function(geometry) { 555 if (this.internalProjection && this.externalProjection) { 556 geometry = geometry.clone(); 557 geometry.transform(this.internalProjection, 558 this.externalProjection); 559 } 551 560 var geometryType = geometry.CLASS_NAME.split('.')[2]; 552 561 var data = this.extract[geometryType.toLowerCase()].apply(this, [geometry]); 553 562 return { -
lib/OpenLayers/Format/Text.js
old new 94 94 } 95 95 } 96 96 if (set) { 97 if (this.internalProjection && this.externalProjection) { 98 geometry.transform(this.externalProjection, 99 this.internalProjection); 100 } 97 101 var feature = new OpenLayers.Feature.Vector(geometry, attributes, style); 98 102 features.push(feature); 99 103 } -
lib/OpenLayers/Format/WKT.js
old new 60 60 if(this.parse[type]) { 61 61 features = this.parse[type].apply(this, [str]); 62 62 } 63 } 63 if (this.internalProjection && this.externalProjection) { 64 if (features && 65 features.CLASS_NAME == "OpenLayers.Feature.Vector") { 66 features.geometry.transform(this.externalProjection, 67 this.internalProjection); 68 } else if (features && typeof features == "object") { 69 for (var i = 0; i < features.length; i++) { 70 var component = features[i]; 71 component.geometry.transform(this.externalProjection, 72 this.internalProjection); 73 } 74 } 75 } 76 } 64 77 return features; 65 78 }, 66 79 … … 97 110 if(!this.extract[type]) { 98 111 return null; 99 112 } 113 if (this.internalProjection && this.externalProjection) { 114 geometry = geometry.clone(); 115 geometry.transform(this.internalProjection, 116 this.externalProjection); 117 } 100 118 data = this.extract[type].apply(this, [geometry]); 101 119 pieces.push(type.toUpperCase() + '(' + data + ')'); 102 120 } -
lib/OpenLayers/Format/GML.js
old new 147 147 var parser = this.parseGeometry[type.toLowerCase()]; 148 148 if(parser) { 149 149 geometry = parser.apply(this, [nodeList[0]]); 150 if (this.internalProjection && this.externalProjection) { 151 geometry.transform(this.externalProjection, 152 this.internalProjection); 153 } 150 154 } else { 151 155 OpenLayers.Console.error("Unsupported geometry type: " + 152 156 type); … … 619 623 * APIMethod: buildGeometryNode 620 624 */ 621 625 buildGeometryNode: function(geometry) { 626 if (this.externalProjection && this.internalProjection) { 627 geometry = geometry.clone(); 628 geometry.transform(this.internalProjection, 629 this.externalProjection); 630 } 622 631 var className = geometry.CLASS_NAME; 623 632 var type = className.substring(className.lastIndexOf(".") + 1); 624 633 var builder = this.buildGeometry[type.toLowerCase()]; -
lib/OpenLayers/Format/GeoRSS.js
old new 152 152 var feature = this.gmlParser.parseFeature(where[0]); 153 153 geometry = feature.geometry; 154 154 } 155 156 if (this.internalProjection && this.externalProjection) { 157 geometry.transform(this.externalProjection, 158 this.internalProjection); 159 } 160 155 161 return geometry; 156 162 }, 157 163 … … 324 330 * {DOMElement} A gml node. 325 331 */ 326 332 buildGeometryNode: function(geometry) { 333 if (this.internalProjection && this.externalProjection) { 334 geometry = geometry.clone(); 335 geometry.transform(this.internalProjection, 336 this.externalProjection); 337 } 327 338 var node; 328 339 // match Polygon 329 340 if (geometry.CLASS_NAME == "OpenLayers.Geometry.Polygon") { -
lib/OpenLayers/Format/KML.js
old new 132 132 var parser = this.parseGeometry[type.toLowerCase()]; 133 133 if(parser) { 134 134 geometry = parser.apply(this, [nodeList[0]]); 135 if (this.internalProjection && this.externalProjection) { 136 geometry.transform(this.externalProjection, 137 this.internalProjection); 138 } 135 139 } else { 136 140 OpenLayers.Console.error("Unsupported geometry type: " + 137 141 type); … … 450 454 * {DOMElement} 451 455 */ 452 456 buildGeometryNode: function(geometry) { 457 if (this.internalProjection && this.externalProjection) { 458 geometry = geometry.clone(); 459 geometry.transform(this.internalProjection, 460 this.externalProjection); 461 } 453 462 var className = geometry.CLASS_NAME; 454 463 var type = className.substring(className.lastIndexOf(".") + 1); 455 464 var builder = this.buildGeometry[type.toLowerCase()]; -
lib/OpenLayers/Format.js
old new 12 12 OpenLayers.Format = OpenLayers.Class({ 13 13 14 14 /** 15 * APIProperty: externalProjection 16 * {<OpenLayers.Projection>} When passed a externalProjection and 17 * internalProjection, the format will reproject the geometries it 18 * reads or writes. The externalProjection is the projection used by 19 * the content which is passed into read or which comes out of write. 20 * In order to reproject, a projection transformation function for the 21 * specified projections must be available. This support may be 22 * provided via proj4js or via a custom transformation function. See 23 * {<OpenLayers.Projection.addTransform>} for more information on 24 * custom transformations. 25 */ 26 externalProjection: null, 27 28 /** 29 * APIProperty: internalProjection 30 * {<OpenLayers.Projection>} When passed a externalProjection and 31 * internalProjection, the format will reproject the geometries it 32 * reads or writes. The internalProjection is the projection used by 33 * the geometries which are returned by read or which are passed into 34 * write. In order to reproject, a projection transformation function 35 * for the specified projections must be available. This support may be 36 * provided via proj4js or via a custom transformation function. See 37 * {<OpenLayers.Projection.addTransform>} for more information on 38 * custom transformations. 39 */ 40 internalProjection: null, 41 42 /** 15 43 * Constructor: OpenLayers.Format 16 44 * Instances of this class are not useful. See one of the subclasses. 17 45 * -
examples/vector-formats.html
old new 55 55 <script src="../lib/OpenLayers.js"></script> 56 56 <script type="text/javascript"> 57 57 var map, vectors, formats; 58 function updateFormats() { 59 var in_options = { 60 'internalProjection': map.baseLayer.projection, 61 'externalProjection': new OpenLayers.Projection(OpenLayers.Util.getElement("inproj").value) 62 } 63 var out_options = { 64 'internalProjection': map.baseLayer.projection, 65 'externalProjection': new OpenLayers.Projection(OpenLayers.Util.getElement("outproj").value) 66 } 67 formats = { 68 'in': { 69 wkt: new OpenLayers.Format.WKT(in_options), 70 geojson: new OpenLayers.Format.GeoJSON(in_options), 71 georss: new OpenLayers.Format.GeoRSS(in_options), 72 gml: new OpenLayers.Format.GML(in_options), 73 kml: new OpenLayers.Format.KML(in_options) 74 }, 75 'out': { 76 wkt: new OpenLayers.Format.WKT(out_options), 77 geojson: new OpenLayers.Format.GeoJSON(out_options), 78 georss: new OpenLayers.Format.GeoRSS(out_options), 79 gml: new OpenLayers.Format.GML(out_options), 80 kml: new OpenLayers.Format.KML(out_options) 81 } 82 }; 83 } 58 84 function init(){ 59 85 map = new OpenLayers.Map('map'); 60 86 var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", … … 73 99 var select = new OpenLayers.Control.SelectFeature(vectors, options); 74 100 map.addControl(select); 75 101 select.activate(); 102 103 updateFormats(); 76 104 77 formats = {78 wkt: new OpenLayers.Format.WKT(),79 geojson: new OpenLayers.Format.GeoJSON(),80 georss: new OpenLayers.Format.GeoRSS(),81 gml: new OpenLayers.Format.GML(),82 kml: new OpenLayers.Format.KML()83 };84 85 105 map.setCenter(new OpenLayers.LonLat(0, 0), 1); 86 106 } 87 107 … … 89 109 var type = document.getElementById("formatType").value; 90 110 // second argument for pretty printing (geojson only) 91 111 var pretty = document.getElementById("prettyPrint").checked; 92 var str = formats[ type].write(feature, pretty);112 var str = formats['out'][type].write(feature, pretty); 93 113 // not a good idea in general, just for this demo 94 114 str = str.replace(/,/g, ', '); 95 115 document.getElementById('output').value = str; … … 98 118 function deserialize() { 99 119 var element = document.getElementById('text'); 100 120 var type = document.getElementById("formatType").value; 101 var features = formats[ type].read(element.value);121 var features = formats['in'][type].read(element.value); 102 122 var bounds; 103 123 if(features) { 104 124 if(features.constructor != Array) { … … 164 184 <input id="prettyPrint" type="checkbox" 165 185 name="prettyPrint" value="1" /> 166 186 <br /> 187 Input Projection: <select id="inproj" onchange='updateFormats()'> 188 <option value="EPSG:4326" selected="selected">EPSG:4326</option> 189 <option value="EPSG:900913">Spherical Mercator</option> 190 </select> <br /> 191 Output Projection: <select id="outproj" onchange='updateFormats()'> 192 <option value="EPSG:4326" selected="selected">EPSG:4326</option> 193 <option value="EPSG:900913">Spherical Mercator</option> 194 </select> 195 <br /> 167 196 <textarea id="text">paste text here...</textarea> 168 197 <br /> 169 198 <input type="button" value="add feature" onclick="deserialize();" />
