terriajs
Version:
Geospatial data visualization platform.
150 lines (143 loc) • 6.02 kB
JavaScript
'use strict';
/*global require,describe,it,expect*/
const featureDataToGeoJson = require('../../lib/Map/featureDataToGeoJson');
describe('featureDataToGeoJson', function() {
describe('Esri polygon', function() {
it('with a single outer ring', function() {
const esri = {
geometryType: 'esriGeometryPolygon',
geometry: {
rings: [
[[5.0, 5.0], [5.0, 10.0], [10.0, 10.0], [10.0, 5.0], [5.0, 5.0]]
]
},
attributes: {}
};
const geoJson = featureDataToGeoJson(esri);
expect(geoJson).toEqual({
type: 'Feature',
geometry: {
type: 'Polygon',
coordinates: [
[[5.0, 5.0], [10.0, 5.0], [10.0, 10.0], [5.0, 10.0], [5.0, 5.0]]
]
},
properties: {}
});
});
it('with one outer ring and two holes', function() {
const esri = {
geometryType: 'esriGeometryPolygon',
geometry: {
rings: [
[[5.0, 5.0], [5.0, 10.0], [10.0, 10.0], [10.0, 5.0], [5.0, 5.0]],
[[7.0, 7.0], [8.0, 7.0], [8.0, 8.0], [7.0, 8.0], [7.0, 7.0]],
[[8.5, 8.5], [9.5, 8.5], [9.5, 9.5], [8.5, 9.5], [8.5, 8.5]]
]
},
attributes: {}
};
const geoJson = featureDataToGeoJson(esri);
expect(geoJson).toEqual({
type: 'Feature',
geometry: {
type: 'Polygon',
coordinates: [
[[5.0, 5.0], [10.0, 5.0], [10.0, 10.0], [5.0, 10.0], [5.0, 5.0]],
[[7.0, 7.0], [7.0, 8.0], [8.0, 8.0], [8.0, 7.0], [7.0, 7.0]],
[[8.5, 8.5], [8.5, 9.5], [9.5, 9.5], [9.5, 8.5], [8.5, 8.5]]
]
},
properties: {}
});
});
it('with two outer rings', function() {
const esri = {
geometryType: 'esriGeometryPolygon',
geometry: {
rings: [
[[5.0, 5.0], [5.0, 10.0], [10.0, 10.0], [10.0, 5.0], [5.0, 5.0]],
[[11.0, 11.0], [11.0, 12.0], [12.0, 12.0], [12.0, 11.0], [11.0, 11.0]]
]
},
attributes: {}
};
const geoJson = featureDataToGeoJson(esri);
expect(geoJson).toEqual({
type: 'Feature',
geometry: {
type: 'MultiPolygon',
coordinates: [
[
[[5.0, 5.0], [10.0, 5.0], [10.0, 10.0], [5.0, 10.0], [5.0, 5.0]]
],
[
[[11.0, 11.0], [12.0, 11.0], [12.0, 12.0], [11.0, 12.0], [11.0, 11.0]]
]
]
},
properties: {}
});
});
it('with two outer rings and a hole in each', function() {
const esri = {
geometryType: 'esriGeometryPolygon',
geometry: {
rings: [
[[5.0, 5.0], [5.0, 10.0], [10.0, 10.0], [10.0, 5.0], [5.0, 5.0]],
[[11.25, 11.25], [11.75, 11.25], [11.75, 11.75], [11.25, 11.75], [11.25, 11.25]],
[[11.0, 11.0], [11.0, 12.0], [12.0, 12.0], [12.0, 11.0], [11.0, 11.0]],
[[7.0, 7.0], [8.0, 7.0], [8.0, 8.0], [7.0, 8.0], [7.0, 7.0]]
]
},
attributes: {}
};
const geoJson = featureDataToGeoJson(esri);
expect(geoJson).toEqual({
type: 'Feature',
geometry: {
type: 'MultiPolygon',
coordinates: [
[
[[5.0, 5.0], [10.0, 5.0], [10.0, 10.0], [5.0, 10.0], [5.0, 5.0]],
[[7.0, 7.0], [7.0, 8.0], [8.0, 8.0], [8.0, 7.0], [7.0, 7.0]]
],
[
[[11.0, 11.0], [12.0, 11.0], [12.0, 12.0], [11.0, 12.0], [11.0, 11.0]],
[[11.25, 11.25], [11.25, 11.75], [11.75, 11.75], [11.75, 11.25], [11.25, 11.25]]
]
]
},
properties: {}
});
});
it('with no outer rings, assumes winding order is reversed and uses holes as outer rings', function() {
const esri = {
geometryType: 'esriGeometryPolygon',
geometry: {
rings: [
[[5.0, 5.0], [10.0, 5.0], [10.0, 10.0], [5.0, 10.0], [5.0, 5.0]],
[[11.0, 11.0], [12.0, 11.0], [12.0, 12.0], [11.0, 12.0], [11.0, 11.0]]
]
},
attributes: {}
};
const geoJson = featureDataToGeoJson(esri);
expect(geoJson).toEqual({
type: 'Feature',
geometry: {
type: 'MultiPolygon',
coordinates: [
[
[[5.0, 5.0], [10.0, 5.0], [10.0, 10.0], [5.0, 10.0], [5.0, 5.0]]
],
[
[[11.0, 11.0], [12.0, 11.0], [12.0, 12.0], [11.0, 12.0], [11.0, 11.0]]
]
]
},
properties: {}
});
});
});
});