Allow orienting coordinates when serializing GeoJSON

This commit is contained in:
Tim Schaub
2015-03-25 18:32:31 -06:00
parent 5d590bcf95
commit be0c9f3c8a
4 changed files with 149 additions and 13 deletions

View File

@@ -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');