Skip to content

Commit e65caac

Browse files
committed
Pullup r4819 from trunk: fixing GeoJSON serializer breakage caused by draft4
update. (Closes #1062) git-svn-id: http://svn.openlayers.org/branches/openlayers/2.5@4830 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
1 parent 4f62fdc commit e65caac

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

lib/OpenLayers/Format/GeoJSON.js

+13-4
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ OpenLayers.Format.GeoJSON = OpenLayers.Class(OpenLayers.Format.JSON, {
447447
if(geojson.type == null) {
448448
geojson.type = "FeatureCollection";
449449
if(element.layer && element.layer.projection) {
450-
this.createCRSObject(element);
450+
geojson.crs = this.createCRSObject(element);
451451
}
452452
} else if(geojson.type != "FeatureCollection") {
453453
OpenLayers.Console.error("FeatureCollection only supports collections of features: " + element);
@@ -469,7 +469,7 @@ OpenLayers.Format.GeoJSON = OpenLayers.Class(OpenLayers.Format.JSON, {
469469
} else if (obj instanceof OpenLayers.Feature.Vector) {
470470
geojson = this.extract.feature.apply(this, [obj]);
471471
if(obj.layer && obj.layer.projection) {
472-
this.createCRSObject(obj);
472+
geojson.crs = this.createCRSObject(obj);
473473
}
474474
}
475475
return OpenLayers.Format.JSON.prototype.write.apply(this,
@@ -479,27 +479,36 @@ OpenLayers.Format.GeoJSON = OpenLayers.Class(OpenLayers.Format.JSON, {
479479
/**
480480
* Method: createCRSObject
481481
* Create the CRS object for an object.
482+
*
483+
* Parameters:
484+
* object - {<OpenLayers.Feature.Vector>}
485+
*
486+
* Returns:
487+
* {Object} An object which can be assigned to the crs property
488+
* of a GeoJSON object.
482489
*/
483490
createCRSObject: function(object) {
484491
var proj = object.layer.projection;
492+
var crs = {}
485493
if (proj.match(/epsg:/i)) {
486494
var code = parseInt(proj.substring(proj.indexOf(":") + 1));
487495
if (code == 4326) {
488-
geojson.crs = {
496+
crs = {
489497
"type": "OGC",
490498
"properties": {
491499
"urn": "urn:ogc:def:crs:OGC:1.3:CRS84"
492500
}
493501
};
494502
} else {
495-
geojson.crs = {
503+
crs = {
496504
"type": "EPSG",
497505
"properties": {
498506
"code": code
499507
}
500508
};
501509
}
502510
}
511+
return crs;
503512
},
504513

505514
/**

tests/Format/test_GeoJSON.html

+17
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,23 @@
184184
t.eq(types, {'Point':15, 'Polygon': 2, 'LineString':2}, "Correct number of each type");
185185
}
186186

187+
function test_Format_GeoJSON_writeWithCRS(t) {
188+
t.plan(2)
189+
var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,2));
190+
feature.fid = 0;
191+
var output = '{"type":"Feature","id":0,"properties":{},"geometry":{"type":"Point","coordinates":[1,2]},"crs":{"type":"OGC","properties":{"urn":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}';
192+
layer = new OpenLayers.Layer.Vector();
193+
layer.projection = "EPSG:4326";
194+
feature.layer = layer;
195+
var parser = new OpenLayers.Format.GeoJSON();
196+
test_out = parser.write(feature);
197+
t.eq(test_out, output, "Output is equal for vector with layer in EPSG:4326 ");
198+
feature.layer.projection = "EPSG:2805";
199+
var output = '{"type":"Feature","id":0,"properties":{},"geometry":{"type":"Point","coordinates":[1,2]},"crs":{"type":"EPSG","properties":{"code":2805}}}';
200+
test_out = parser.write(feature);
201+
t.eq(test_out, output, "Output is equal for vector with point");
202+
}
203+
187204
function test_Format_GeoJSON_write(t) {
188205
t.plan(10);
189206

0 commit comments

Comments
 (0)