Allow orienting coordinates when serializing GeoJSON
This commit is contained in:
@@ -558,6 +558,106 @@ describe('ol.format.GeoJSON', function() {
|
||||
format.readGeometry(geojson).getCoordinates());
|
||||
});
|
||||
|
||||
it('maintains coordinate order by default', function() {
|
||||
|
||||
var cw = [[-180, -90], [-180, 90], [180, 90], [180, -90], [-180, -90]];
|
||||
var ccw = [[-180, -90], [180, -90], [180, 90], [-180, 90], [-180, -90]];
|
||||
|
||||
var right = new ol.geom.Polygon([ccw, cw]);
|
||||
var rightMulti = new ol.geom.MultiPolygon([[ccw, cw]]);
|
||||
var left = new ol.geom.Polygon([cw, ccw]);
|
||||
var leftMulti = new ol.geom.MultiPolygon([[cw, ccw]]);
|
||||
|
||||
var rightObj = {
|
||||
type: 'Polygon',
|
||||
coordinates: [ccw, cw]
|
||||
};
|
||||
|
||||
var rightMultiObj = {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [[ccw, cw]]
|
||||
};
|
||||
|
||||
var leftObj = {
|
||||
type: 'Polygon',
|
||||
coordinates: [cw, ccw]
|
||||
};
|
||||
|
||||
var leftMultiObj = {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [[cw, ccw]]
|
||||
};
|
||||
|
||||
expect(JSON.parse(format.writeGeometry(right))).to.eql(rightObj);
|
||||
expect(
|
||||
JSON.parse(format.writeGeometry(rightMulti))).to.eql(rightMultiObj);
|
||||
expect(JSON.parse(format.writeGeometry(left))).to.eql(leftObj);
|
||||
expect(JSON.parse(format.writeGeometry(leftMulti))).to.eql(leftMultiObj);
|
||||
|
||||
});
|
||||
|
||||
it('allows serializing following the right-hand rule', function() {
|
||||
|
||||
var cw = [[-180, -90], [-180, 90], [180, 90], [180, -90], [-180, -90]];
|
||||
var ccw = [[-180, -90], [180, -90], [180, 90], [-180, 90], [-180, -90]];
|
||||
var right = new ol.geom.Polygon([ccw, cw]);
|
||||
var rightMulti = new ol.geom.MultiPolygon([[ccw, cw]]);
|
||||
var left = new ol.geom.Polygon([cw, ccw]);
|
||||
var leftMulti = new ol.geom.MultiPolygon([[cw, ccw]]);
|
||||
|
||||
var rightObj = {
|
||||
type: 'Polygon',
|
||||
coordinates: [ccw, cw]
|
||||
};
|
||||
|
||||
var rightMultiObj = {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [[ccw, cw]]
|
||||
};
|
||||
|
||||
var json = format.writeGeometry(right, {rightHanded: true});
|
||||
expect(JSON.parse(json)).to.eql(rightObj);
|
||||
json = format.writeGeometry(rightMulti, {rightHanded: true});
|
||||
expect(JSON.parse(json)).to.eql(rightMultiObj);
|
||||
|
||||
json = format.writeGeometry(left, {rightHanded: true});
|
||||
expect(JSON.parse(json)).to.eql(rightObj);
|
||||
json = format.writeGeometry(leftMulti, {rightHanded: true});
|
||||
expect(JSON.parse(json)).to.eql(rightMultiObj);
|
||||
|
||||
});
|
||||
|
||||
it('allows serializing following the left-hand rule', function() {
|
||||
|
||||
var cw = [[-180, -90], [-180, 90], [180, 90], [180, -90], [-180, -90]];
|
||||
var ccw = [[-180, -90], [180, -90], [180, 90], [-180, 90], [-180, -90]];
|
||||
var right = new ol.geom.Polygon([ccw, cw]);
|
||||
var rightMulti = new ol.geom.MultiPolygon([[ccw, cw]]);
|
||||
var left = new ol.geom.Polygon([cw, ccw]);
|
||||
var leftMulti = new ol.geom.MultiPolygon([[cw, ccw]]);
|
||||
|
||||
var leftObj = {
|
||||
type: 'Polygon',
|
||||
coordinates: [cw, ccw]
|
||||
};
|
||||
|
||||
var leftMultiObj = {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [[cw, ccw]]
|
||||
};
|
||||
|
||||
var json = format.writeGeometry(right, {rightHanded: false});
|
||||
expect(JSON.parse(json)).to.eql(leftObj);
|
||||
json = format.writeGeometry(rightMulti, {rightHanded: false});
|
||||
expect(JSON.parse(json)).to.eql(leftMultiObj);
|
||||
|
||||
json = format.writeGeometry(left, {rightHanded: false});
|
||||
expect(JSON.parse(json)).to.eql(leftObj);
|
||||
json = format.writeGeometry(leftMulti, {rightHanded: false});
|
||||
expect(JSON.parse(json)).to.eql(leftMultiObj);
|
||||
|
||||
});
|
||||
|
||||
it('encodes geometry collection', function() {
|
||||
var collection = new ol.geom.GeometryCollection([
|
||||
new ol.geom.Point([10, 20]),
|
||||
@@ -611,6 +711,7 @@ goog.require('ol.geom.Circle');
|
||||
goog.require('ol.geom.GeometryCollection');
|
||||
goog.require('ol.geom.LineString');
|
||||
goog.require('ol.geom.LinearRing');
|
||||
goog.require('ol.geom.MultiPolygon');
|
||||
goog.require('ol.geom.Point');
|
||||
goog.require('ol.geom.Polygon');
|
||||
goog.require('ol.proj');
|
||||
|
||||
Reference in New Issue
Block a user