Normalize all toGeoJSON output to Features
This commit is contained in:
parent
d57525ec52
commit
e7d0fb1b37
@ -1,7 +1,31 @@
|
|||||||
|
describe("L.GeoJSON", function () {
|
||||||
|
describe("addData", function () {
|
||||||
|
var geoJSON = {
|
||||||
|
type: 'Feature',
|
||||||
|
geometry: {
|
||||||
|
type: 'Point',
|
||||||
|
coordinates: [20, 10]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
it("sets feature property on member layers", function () {
|
||||||
|
var layer = new L.GeoJSON();
|
||||||
|
layer.addData(geoJSON);
|
||||||
|
expect(layer.getLayers()[0].feature).to.eql(geoJSON);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("normalizes a geometry to a Feature", function () {
|
||||||
|
var layer = new L.GeoJSON();
|
||||||
|
layer.addData(geoJSON.geometry);
|
||||||
|
expect(layer.getLayers()[0].feature).to.eql(geoJSON);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("L.Marker#toGeoJSON", function () {
|
describe("L.Marker#toGeoJSON", function () {
|
||||||
it("returns a Point object", function () {
|
it("returns a Point object", function () {
|
||||||
var marker = new L.Marker([10, 20]);
|
var marker = new L.Marker([10, 20]);
|
||||||
expect(marker.toGeoJSON()).to.eql({
|
expect(marker.toGeoJSON().geometry).to.eql({
|
||||||
type: 'Point',
|
type: 'Point',
|
||||||
coordinates: [20, 10]
|
coordinates: [20, 10]
|
||||||
});
|
});
|
||||||
@ -11,7 +35,7 @@ describe("L.Marker#toGeoJSON", function () {
|
|||||||
describe("L.Polyline#toGeoJSON", function () {
|
describe("L.Polyline#toGeoJSON", function () {
|
||||||
it("returns a LineString object", function () {
|
it("returns a LineString object", function () {
|
||||||
var polyline = new L.Polyline([[10, 20], [2, 5]]);
|
var polyline = new L.Polyline([[10, 20], [2, 5]]);
|
||||||
expect(polyline.toGeoJSON()).to.eql({
|
expect(polyline.toGeoJSON().geometry).to.eql({
|
||||||
type: 'LineString',
|
type: 'LineString',
|
||||||
coordinates: [[20, 10], [5, 2]]
|
coordinates: [[20, 10], [5, 2]]
|
||||||
});
|
});
|
||||||
@ -21,7 +45,7 @@ describe("L.Polyline#toGeoJSON", function () {
|
|||||||
describe("L.MultiPolyline#toGeoJSON", function () {
|
describe("L.MultiPolyline#toGeoJSON", function () {
|
||||||
it("returns a MultiLineString object", function () {
|
it("returns a MultiLineString object", function () {
|
||||||
var multiPolyline = new L.MultiPolyline([[[10, 20], [2, 5]], [[1, 2], [3, 4]]]);
|
var multiPolyline = new L.MultiPolyline([[[10, 20], [2, 5]], [[1, 2], [3, 4]]]);
|
||||||
expect(multiPolyline.toGeoJSON()).to.eql({
|
expect(multiPolyline.toGeoJSON().geometry).to.eql({
|
||||||
type: 'MultiLineString',
|
type: 'MultiLineString',
|
||||||
coordinates: [
|
coordinates: [
|
||||||
[[20, 10], [5, 2]],
|
[[20, 10], [5, 2]],
|
||||||
@ -34,7 +58,7 @@ describe("L.MultiPolyline#toGeoJSON", function () {
|
|||||||
describe("L.Polygon#toGeoJSON", function () {
|
describe("L.Polygon#toGeoJSON", function () {
|
||||||
it("returns a Polygon object (no holes)", function () {
|
it("returns a Polygon object (no holes)", function () {
|
||||||
var polygon = new L.Polygon([[1, 2], [3, 4], [5, 6]]);
|
var polygon = new L.Polygon([[1, 2], [3, 4], [5, 6]]);
|
||||||
expect(polygon.toGeoJSON()).to.eql({
|
expect(polygon.toGeoJSON().geometry).to.eql({
|
||||||
type: 'Polygon',
|
type: 'Polygon',
|
||||||
coordinates: [[[2, 1], [4, 3], [6, 5], [2, 1]]]
|
coordinates: [[[2, 1], [4, 3], [6, 5], [2, 1]]]
|
||||||
});
|
});
|
||||||
@ -42,7 +66,7 @@ describe("L.Polygon#toGeoJSON", function () {
|
|||||||
|
|
||||||
it("returns a Polygon object (with holes)", function () {
|
it("returns a Polygon object (with holes)", function () {
|
||||||
var polygon = new L.Polygon([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]]);
|
var polygon = new L.Polygon([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]]);
|
||||||
expect(polygon.toGeoJSON()).to.eql({
|
expect(polygon.toGeoJSON().geometry).to.eql({
|
||||||
type: 'Polygon',
|
type: 'Polygon',
|
||||||
coordinates: [
|
coordinates: [
|
||||||
[[2, 1], [4, 3], [6, 5], [2, 1]],
|
[[2, 1], [4, 3], [6, 5], [2, 1]],
|
||||||
@ -55,7 +79,7 @@ describe("L.Polygon#toGeoJSON", function () {
|
|||||||
describe("L.MultiPolygon#toGeoJSON", function () {
|
describe("L.MultiPolygon#toGeoJSON", function () {
|
||||||
it("returns a MultiPolygon object", function () {
|
it("returns a MultiPolygon object", function () {
|
||||||
var multiPolygon = new L.MultiPolygon([[[1, 2], [3, 4], [5, 6]]]);
|
var multiPolygon = new L.MultiPolygon([[[1, 2], [3, 4], [5, 6]]]);
|
||||||
expect(multiPolygon.toGeoJSON()).to.eql({
|
expect(multiPolygon.toGeoJSON().geometry).to.eql({
|
||||||
type: 'MultiPolygon',
|
type: 'MultiPolygon',
|
||||||
coordinates: [
|
coordinates: [
|
||||||
[[[2, 1], [4, 3], [6, 5], [2, 1]]]
|
[[[2, 1], [4, 3], [6, 5], [2, 1]]]
|
||||||
@ -65,13 +89,37 @@ describe("L.MultiPolygon#toGeoJSON", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("L.LayerGroup#toGeoJSON", function () {
|
describe("L.LayerGroup#toGeoJSON", function () {
|
||||||
it("returns a GeometryCollection object", function () {
|
it("returns a FeatureCollection object", function () {
|
||||||
var marker = new L.Marker([10, 20]),
|
var marker = new L.Marker([10, 20]),
|
||||||
polyline = new L.Polyline([[10, 20], [2, 5]]),
|
polyline = new L.Polyline([[10, 20], [2, 5]]),
|
||||||
layerGroup = new L.LayerGroup([marker, polyline]);
|
layerGroup = new L.LayerGroup([marker, polyline]);
|
||||||
expect(layerGroup.toGeoJSON()).to.eql({
|
expect(layerGroup.toGeoJSON()).to.eql({
|
||||||
type: 'GeometryCollection',
|
type: 'FeatureCollection',
|
||||||
geometries: [marker.toGeoJSON(), polyline.toGeoJSON()]
|
features: [marker.toGeoJSON(), polyline.toGeoJSON()]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("ensures that every member is a Feature", function () {
|
||||||
|
var tileLayer = new L.TileLayer(),
|
||||||
|
layerGroup = new L.LayerGroup([tileLayer]);
|
||||||
|
|
||||||
|
tileLayer.toGeoJSON = function () {
|
||||||
|
return {
|
||||||
|
type: 'Point',
|
||||||
|
coordinates: [20, 10]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(layerGroup.toGeoJSON()).to.eql({
|
||||||
|
type: 'FeatureCollection',
|
||||||
|
features: [{
|
||||||
|
type: 'Feature',
|
||||||
|
properties: {},
|
||||||
|
geometry: {
|
||||||
|
type: 'Point',
|
||||||
|
coordinates: [20, 10]
|
||||||
|
}
|
||||||
|
}]
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -79,8 +127,8 @@ describe("L.LayerGroup#toGeoJSON", function () {
|
|||||||
var tileLayer = new L.TileLayer(),
|
var tileLayer = new L.TileLayer(),
|
||||||
layerGroup = new L.LayerGroup([tileLayer]);
|
layerGroup = new L.LayerGroup([tileLayer]);
|
||||||
expect(layerGroup.toGeoJSON()).to.eql({
|
expect(layerGroup.toGeoJSON()).to.eql({
|
||||||
type: 'GeometryCollection',
|
type: 'FeatureCollection',
|
||||||
geometries: []
|
features: []
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -33,7 +33,7 @@ L.GeoJSON = L.FeatureGroup.extend({
|
|||||||
if (options.filter && !options.filter(geojson)) { return; }
|
if (options.filter && !options.filter(geojson)) { return; }
|
||||||
|
|
||||||
var layer = L.GeoJSON.geometryToLayer(geojson, options.pointToLayer, options.coordsToLatLng);
|
var layer = L.GeoJSON.geometryToLayer(geojson, options.pointToLayer, options.coordsToLatLng);
|
||||||
layer.feature = geojson;
|
layer.feature = L.GeoJSON.asFeature(geojson);
|
||||||
|
|
||||||
layer.defaultOptions = layer.options;
|
layer.defaultOptions = layer.options;
|
||||||
this.resetStyle(layer);
|
this.resetStyle(layer);
|
||||||
@ -161,7 +161,19 @@ L.extend(L.GeoJSON, {
|
|||||||
},
|
},
|
||||||
|
|
||||||
getFeature: function (layer, newGeometry) {
|
getFeature: function (layer, newGeometry) {
|
||||||
return layer.feature ? L.extend({}, layer.feature, {geometry: newGeometry}) : newGeometry;
|
return layer.feature ? L.extend({}, layer.feature, {geometry: newGeometry}) : L.GeoJSON.asFeature(newGeometry);
|
||||||
|
},
|
||||||
|
|
||||||
|
asFeature: function (geoJSON) {
|
||||||
|
if (geoJSON.type === 'Feature') {
|
||||||
|
return geoJSON;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'Feature',
|
||||||
|
properties: {},
|
||||||
|
geometry: geoJSON
|
||||||
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -212,7 +224,7 @@ L.Polygon.include({
|
|||||||
var coords = [];
|
var coords = [];
|
||||||
|
|
||||||
this.eachLayer(function (layer) {
|
this.eachLayer(function (layer) {
|
||||||
coords.push(layer.toGeoJSON().coordinates);
|
coords.push(layer.toGeoJSON().geometry.coordinates);
|
||||||
});
|
});
|
||||||
|
|
||||||
return L.GeoJSON.getFeature(this, {
|
return L.GeoJSON.getFeature(this, {
|
||||||
@ -229,18 +241,18 @@ L.Polygon.include({
|
|||||||
|
|
||||||
L.LayerGroup.include({
|
L.LayerGroup.include({
|
||||||
toGeoJSON: function () {
|
toGeoJSON: function () {
|
||||||
var geoms = [];
|
var features = [];
|
||||||
|
|
||||||
this.eachLayer(function (layer) {
|
this.eachLayer(function (layer) {
|
||||||
if (layer.toGeoJSON) {
|
if (layer.toGeoJSON) {
|
||||||
geoms.push(layer.toGeoJSON());
|
features.push(L.GeoJSON.asFeature(layer.toGeoJSON()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return L.GeoJSON.getFeature(this, {
|
return {
|
||||||
type: 'GeometryCollection',
|
type: 'FeatureCollection',
|
||||||
geometries: geoms
|
features: features
|
||||||
});
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user