Changeset 5516
- Timestamp:
- 12/19/07 17:07:12 (1 year ago)
- Files:
-
- trunk/openlayers/examples/vector-formats.html (modified) (5 diffs)
- trunk/openlayers/lib/OpenLayers/Format.js (modified) (1 diff)
- trunk/openlayers/lib/OpenLayers/Format/GML.js (modified) (2 diffs)
- trunk/openlayers/lib/OpenLayers/Format/GeoJSON.js (modified) (2 diffs)
- trunk/openlayers/lib/OpenLayers/Format/GeoRSS.js (modified) (2 diffs)
- trunk/openlayers/lib/OpenLayers/Format/KML.js (modified) (2 diffs)
- trunk/openlayers/lib/OpenLayers/Format/Text.js (modified) (1 diff)
- trunk/openlayers/lib/OpenLayers/Format/WKT.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openlayers/examples/vector-formats.html
r5362 r5516 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'); … … 74 100 map.addControl(select); 75 101 select.activate(); 76 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 }; 102 103 updateFormats(); 84 104 85 105 map.setCenter(new OpenLayers.LonLat(0, 0), 1); … … 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, ', '); … … 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) { … … 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 /> trunk/openlayers/lib/OpenLayers/Format.js
r4985 r5516 12 12 OpenLayers.Format = OpenLayers.Class({ 13 13 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 14 42 /** 15 43 * Constructor: OpenLayers.Format trunk/openlayers/lib/OpenLayers/Format/GML.js
r5514 r5516 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: " + … … 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); trunk/openlayers/lib/OpenLayers/Format/GeoJSON.js
r5436 r5516 232 232 } 233 233 } 234 if (this.internalProjection && this.externalProjection) { 235 geometry.transform(this.externalProjection, 236 this.internalProjection); 237 } 234 238 return geometry; 235 239 }, … … 527 531 */ 528 532 'geometry': function(geometry) { 533 if (this.internalProjection && this.externalProjection) { 534 geometry = geometry.clone(); 535 geometry.transform(this.internalProjection, 536 this.externalProjection); 537 } 529 538 var geometryType = geometry.CLASS_NAME.split('.')[2]; 530 539 var data = this.extract[geometryType.toLowerCase()].apply(this, [geometry]); trunk/openlayers/lib/OpenLayers/Format/GeoRSS.js
r5238 r5516 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 }, … … 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 trunk/openlayers/lib/OpenLayers/Format/KML.js
r5402 r5516 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: " + … … 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); trunk/openlayers/lib/OpenLayers/Format/Text.js
r5412 r5516 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); trunk/openlayers/lib/OpenLayers/Format/WKT.js
r5002 r5516 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 }, … … 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 + ')');
