terriajs
Version:
Geospatial data visualization platform.
291 lines (285 loc) • 6.81 kB
text/typescript
import featureDataToGeoJson from "../../lib/Map/PickedFeatures/featureDataToGeoJson";
describe("featureDataToGeoJson", function () {
describe("Esri polygon", function () {
it("with a single outer ring", function () {
const esri = {
geometryType: "esriGeometryPolygon",
geometry: {
rings: [
[
[],
[],
[],
[],
[]
]
]
},
attributes: {}
};
const geoJson = featureDataToGeoJson(esri);
expect(geoJson?.features[0]).toEqual({
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [
[
[],
[],
[],
[],
[]
]
]
},
properties: {}
});
});
it("with one outer ring and two holes", function () {
const esri = {
geometryType: "esriGeometryPolygon",
geometry: {
rings: [
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
]
]
},
attributes: {}
};
const geoJson = featureDataToGeoJson(esri);
expect(geoJson?.features[0]).toEqual({
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
]
]
},
properties: {}
});
});
it("with two outer rings", function () {
const esri = {
geometryType: "esriGeometryPolygon",
geometry: {
rings: [
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
]
]
},
attributes: {}
};
const geoJson = featureDataToGeoJson(esri);
expect(geoJson?.features[0]).toEqual({
type: "Feature",
geometry: {
type: "MultiPolygon",
coordinates: [
[
[
[],
[],
[],
[],
[]
]
],
[
[
[],
[],
[],
[],
[]
]
]
]
},
properties: {}
});
});
it("with two outer rings and a hole in each", function () {
const esri = {
geometryType: "esriGeometryPolygon",
geometry: {
rings: [
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
]
]
},
attributes: {}
};
const geoJson = featureDataToGeoJson(esri);
expect(geoJson?.features[0]).toEqual({
type: "Feature",
geometry: {
type: "MultiPolygon",
coordinates: [
[
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
]
],
[
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
]
]
]
},
properties: {}
});
});
it("with no outer rings, assumes winding order is reversed and uses holes as outer rings", function () {
const esri = {
geometryType: "esriGeometryPolygon",
geometry: {
rings: [
[
[],
[],
[],
[],
[]
],
[
[],
[],
[],
[],
[]
]
]
},
attributes: {}
};
const geoJson = featureDataToGeoJson(esri);
expect(geoJson?.features[0]).toEqual({
type: "Feature",
geometry: {
type: "MultiPolygon",
coordinates: [
[
[
[],
[],
[],
[],
[]
]
],
[
[
[],
[],
[],
[],
[]
]
]
]
},
properties: {}
});
});
});
});