UNPKG

terraformer

Version:

A Geo-toolkit built in Javascript.

538 lines (510 loc) 17.4 kB
if(typeof module === "object"){ var Terraformer = require("../terraformer.js"); } describe("Spatial Reference Converters", function(){ it("should convert a GeoJSON Point to Web Mercator", function(){ var input = { "type": "Point", "coordinates": [-122, 45] }; var expectedOutput = { "type": "Point", "coordinates": [-13580977.876779145, 5621521.486191948], "crs": { "type": "link", "properties": { "href": "http://spatialreference.org/ref/sr-org/6928/ogcwkt/", "type": "ogcwkt" } } }; var output = Terraformer.toMercator(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON MultiPoint to Web Mercator", function(){ var input = { "type": "MultiPoint", "coordinates": [ [-122, 45], [100,0], [45, 62] ] }; var expectedOutput = { "type": "MultiPoint", "coordinates": [ [-13580977.876779145,5621521.486191948],[11131949.079327168,0],[5009377.085697226,8859142.800565446] ], "crs": { "type": "link", "properties": { "href": "http://spatialreference.org/ref/sr-org/6928/ogcwkt/", "type": "ogcwkt" } } }; var output = Terraformer.toMercator(input); // expect(output).toEqual(expectedOutput); expect(output.type).toEqual(expectedOutput.type); expect(output.crs).toEqual(expectedOutput.crs); expect(output.coordinates[0][0]).toBeCloseTo(expectedOutput.coordinates[0][0], 9); expect(output.coordinates[0][1]).toBeCloseTo(expectedOutput.coordinates[0][1], 9); expect(output.coordinates[1][0]).toBeCloseTo(expectedOutput.coordinates[1][0], 9); expect(output.coordinates[1][1]).toBeCloseTo(expectedOutput.coordinates[1][1], 9); }); it("should convert a GeoJSON LineString to Web Mercator", function(){ var input = { "type": "LineString", "coordinates": [ [-122, 45], [100,0], [45, 62] ] }; var expectedOutput = { "type": "LineString", "coordinates": [ [-13580977.876779145,5621521.486191948],[11131949.079327168,0],[5009377.085697226,8859142.800565446] ], "crs": { "type": "link", "properties": { "href": "http://spatialreference.org/ref/sr-org/6928/ogcwkt/", "type": "ogcwkt" } } }; var output = Terraformer.toMercator(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON MultiLineString to Web Mercator", function(){ var input = { "type": "MultiLineString", "coordinates": [ [ [41.8359375,71.015625],[56.953125,33.75] ], [ [21.796875,36.5625],[47.8359375,71.015625] ] ] }; var expectedOutput = { "type": "MultiLineString", "coordinates": [ [ [4657155.25935914,11407616.835043576],[6339992.874085551,3995282.329624161] ], [ [2426417.025884594,4378299.115616046],[5325072.20411877,11407616.835043576] ] ], "crs": { "type": "link", "properties": { "href": "http://spatialreference.org/ref/sr-org/6928/ogcwkt/", "type": "ogcwkt" } } }; var output = Terraformer.toMercator(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON Polygon to Web Mercator", function(){ var input = { "type": "Polygon", "coordinates": [ [ [41.8359375,71.015625],[56.953125,33.75],[21.796875,36.5625],[41.8359375,71.015625] ] ] }; var expectedOutput = { "type": "Polygon", "coordinates": [ [ [4657155.25935914,11407616.835043576],[6339992.874085551,3995282.329624161],[2426417.025884594,4378299.115616046],[4657155.25935914,11407616.835043576] ] ], "crs": { "type": "link", "properties": { "href": "http://spatialreference.org/ref/sr-org/6928/ogcwkt/", "type": "ogcwkt" } } }; var output = Terraformer.toMercator(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON MultiPolygon to Web Mercator", function(){ var input = { "type": "MultiPolygon", "coordinates": [ [ [ [102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0] ] ], [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ] ] ] }; var expectedOutput = { "type": "MultiPolygon", "coordinates": [ [ [ [11354588.060913712,222684.20850554065],[11465907.551706985,222684.20850554065],[11465907.551706985,334111.1714019535],[11354588.060913712,334111.1714019535],[11354588.060913712,222684.20850554065] ] ], [ [ [11131949.079327168,0],[11243268.57012044,0],[11243268.57012044,111325.1428663833],[11131949.079327168,111325.1428663833],[11131949.079327168,0] ] ] ], "crs": { "type": "link", "properties": { "href": "http://spatialreference.org/ref/sr-org/6928/ogcwkt/", "type": "ogcwkt" } } }; var output = Terraformer.toMercator(input); expect(output.type).toEqual(expectedOutput.type); expect(output.crs).toEqual(expectedOutput.crs); for (var i=0; i < output.coordinates[0].length; i++) { var segments = output.coordinates[0][i]; for (var j=0; j < segments.length; j++) { expect(segments[j][0]).toBeCloseTo(expectedOutput.coordinates[0][i][j][0], 9); expect(segments[j][1]).toBeCloseTo(expectedOutput.coordinates[0][i][j][1], 9); } } }); it("should convert a GeoJSON Feature to Web Mercator", function(){ var input = { "type": "Feature", "id": "foo", "geometry":{ "type": "Point", "coordinates": [-122, 45] }, "properties": { "bar": "baz" } }; var expectedOutput = { "type": "Feature", "id": "foo", "geometry":{ "type": "Point", "coordinates": [-13580977.876779145, 5621521.486191948] }, "properties": { "bar": "baz" }, "crs": { "type": "link", "properties": { "href": "http://spatialreference.org/ref/sr-org/6928/ogcwkt/", "type": "ogcwkt" } } }; var output = Terraformer.toMercator(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON Feature Collection to Web Mercator", function(){ var input = { "type": "FeatureCollection", "features": [ { "type": "Feature", "id": "foo", "geometry":{ "type": "Point", "coordinates": [-122, 45] }, "properties": { "bar": "baz" } },{ "type": "Feature", "id": "bar", "geometry":{ "type": "Point", "coordinates": [-122, 45] }, "properties": { "bar": "baz" } } ] }; var expectedOutput = { "type": "FeatureCollection", "features": [ { "type": "Feature", "id": "foo", "geometry":{ "type": "Point", "coordinates": [-13580977.876779145, 5621521.486191948] }, "properties": { "bar": "baz" } },{ "type": "Feature", "id": "bar", "geometry":{ "type": "Point", "coordinates": [-13580977.876779145, 5621521.486191948] }, "properties": { "bar": "baz" } } ], "crs": { "type": "link", "properties": { "href": "http://spatialreference.org/ref/sr-org/6928/ogcwkt/", "type": "ogcwkt" } } }; var output = Terraformer.toMercator(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON Geometry Collection to Web Mercator", function(){ var input = { "type": "GeometryCollection", "geometries": [ { "type": "Point", "coordinates": [-122, 45] },{ "type": "Point", "coordinates": [-122, 45] } ] }; var expectedOutput = { "type": "GeometryCollection", "geometries": [ { "type": "Point", "coordinates": [-13580977.876779145, 5621521.486191948] },{ "type": "Point", "coordinates": [-13580977.876779145, 5621521.486191948] } ], "crs": { "type": "link", "properties": { "href": "http://spatialreference.org/ref/sr-org/6928/ogcwkt/", "type": "ogcwkt" } } }; var output = Terraformer.toMercator(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON Point to Geographic coordinates", function(){ var input = { "type": "Point", "coordinates": [-13656274.38035172, 5703203.67194997] }; var expectedOutput = { "type": "Point", "coordinates": [-122.67639999999798, 45.51649999999925] }; var output = Terraformer.toGeographic(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON MultiPoint to Geographic coordinates", function(){ var input = { "type": "MultiPoint", "coordinates": [ [-13656274.380351715,5703203.671949966],[11131949.079327168,0],[-13619241.057432571,6261718.09354067] ] }; var expectedOutput = { "type": "MultiPoint", "coordinates": [ [-122.67639999999793,45.51649999999922],[99.99999999999831,0],[-122.34372399999793,48.92247999999917] ] }; var output = Terraformer.toGeographic(input); expect(expectedOutput.coordinates[0][0]).toBeCloseTo(-122.6764000000, 10); expect(expectedOutput.coordinates[0][1]).toBeCloseTo(45.5165000000, 10); expect(expectedOutput.coordinates[1][0]).toBeCloseTo(100.0000000000, 10); expect(expectedOutput.coordinates[1][1]).toBeCloseTo(0.0000000000, 10); expect(expectedOutput.coordinates[2][0]).toBeCloseTo(-122.3437240000, 10); expect(expectedOutput.coordinates[2][1]).toBeCloseTo(48.9224800000, 10); }); it("should convert a GeoJSON LineString to Geographic coordinates", function(){ var input = { "type": "LineString", "coordinates": [ [743579.411158182,6075718.008992066],[-7279251.077653782,6869641.046935855],[-5831228.013819427,5242073.5675988225] ] }; var expectedOutput = { "type": "LineString", "coordinates": [ [6.679687499999886,47.8124999999992],[-65.3906249999989,52.38281249999912],[-52.38281249999912,42.539062499999275] ] }; var output = Terraformer.toGeographic(input); expect(expectedOutput.coordinates[0][0]).toBeCloseTo(6.6796875000, 10); expect(expectedOutput.coordinates[0][1]).toBeCloseTo(47.8125000000, 10); expect(expectedOutput.coordinates[1][0]).toBeCloseTo(-65.3906250000, 10); expect(expectedOutput.coordinates[1][1]).toBeCloseTo(52.3828125000, 10); expect(expectedOutput.coordinates[2][0]).toBeCloseTo(-52.3828125000, 10); expect(expectedOutput.coordinates[2][1]).toBeCloseTo(42.5390625000, 10); }); it("should convert a GeoJSON MultiLineString to Geographic coordinates", function(){ var input = { "type": "MultiLineString", "coordinates": [ [ [41.8359375,71.015625],[56.953125,33.75] ], [ [21.796875,36.5625],[47.8359375,71.015625] ] ] }; var expectedOutput = { "type": "MultiLineString", "coordinates": [ [ [0.00037581862081719045,0.0006379442134689308],[0.0005116186266586962,0.00030318140838354136]],[[0.00019580465958542694,0.00032844652575519755],[0.0004297175378643617,0.0006379442134689308] ] ] }; var output = Terraformer.toGeographic(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON Polygon to Geographic coordinates", function(){ var input = { "type": "Polygon", "coordinates": [ [ [41.8359375,71.015625],[56.953125,33.75],[21.796875,36.5625],[41.8359375,71.015625] ] ] }; var expectedOutput = { "type": "Polygon", "coordinates": [ [ [0.00037581862081719045,0.0006379442134689308],[0.0005116186266586962,0.00030318140838354136],[0.00019580465958542694,0.00032844652575519755],[0.00037581862081719045,0.0006379442134689308] ] ] }; var output = Terraformer.toGeographic(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON MultiPolygon to Geographic coordinates", function(){ var input = { "type": "MultiPolygon", "coordinates": [ [ [ [102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0] ] ], [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ] ] ] }; var expectedOutput = { "type": "MultiPolygon", "coordinates": [ [ [ [0.000916281589801912,0.000017966305681987637],[0.0009252647426431071,0.000017966305681987637],[0.0009252647426431071,0.000026949458522981454],[0.000916281589801912,0.000026949458522981454],[0.000916281589801912,0.000017966305681987637] ] ], [ [ [0.0008983152841195215,0],[0.0009072984369607167,0],[0.0009072984369607167,0.000008983152840993819],[0.0008983152841195215,0.000008983152840993819],[0.0008983152841195215,0] ] ] ] }; var output = Terraformer.toGeographic(input); expect(output).toEqual(expectedOutput); }); it("should convert a GeoJSON Feature to Geographic coordinates", function(){ var input = { "type": "Feature", "id": "foo", "geometry":{ "type": "Point", "coordinates": [-13656274.380351715, 5703203.671949966] }, "properties": { "bar": "baz" } }; var expectedOutput = { "type": "Feature", "id": "foo", "geometry":{ "type": "Point", "coordinates": [-122.67639999999793, 45.51649999999923] }, "properties": { "bar": "baz" } }; var output = Terraformer.toGeographic(input); expect(expectedOutput.geometry.coordinates[0]).toBeCloseTo(-122.6764000000, 10); expect(expectedOutput.geometry.coordinates[1]).toBeCloseTo(45.5165000000, 10); }); it("should convert a GeoJSON Feature Collection to Geographic coordinates", function(){ var input = { "type": "FeatureCollection", "features": [ { "type": "Feature", "id": "foo", "geometry":{ "type": "Point", "coordinates": [-13656274.380351715, 5703203.671949966] }, "properties": { "bar": "baz" } },{ "type": "Feature", "id": "bar", "geometry":{ "type": "Point", "coordinates": [-13656274.380351715, 5703203.671949966] }, "properties": { "bar": "baz" } } ] }; var expectedOutput = { "type": "FeatureCollection", "features": [ { "type": "Feature", "id": "foo", "geometry":{ "type": "Point", "coordinates": [-122.67639999999793, 45.51649999999923] }, "properties": { "bar": "baz" } },{ "type": "Feature", "id": "bar", "geometry":{ "type": "Point", "coordinates": [-122.67639999999793, 45.51649999999923] }, "properties": { "bar": "baz" } } ] }; var output = Terraformer.toGeographic(input); expect(expectedOutput.features[0].geometry.coordinates[0]).toBeCloseTo(-122.6764000000, 10); expect(expectedOutput.features[0].geometry.coordinates[1]).toBeCloseTo(45.5165000000, 10); expect(expectedOutput.features[1].geometry.coordinates[0]).toBeCloseTo(-122.6764000000, 10); expect(expectedOutput.features[1].geometry.coordinates[1]).toBeCloseTo(45.5165000000, 10); }); it("should convert a GeoJSON Geometry Collection to Geographic coordinates", function(){ var input = { "type": "GeometryCollection", "geometries": [ { "type": "Point", "coordinates": [-13656274.380351715, 5703203.671949966] },{ "type": "Point", "coordinates": [-13656274.380351715, 5703203.671949966] } ] }; var expectedOutput = { "type": "GeometryCollection", "geometries": [ { "type": "Point", "coordinates": [-122.67639999999793, 45.51649999999923] },{ "type": "Point", "coordinates": [-122.67639999999793, 45.51649999999923] } ] }; var output = Terraformer.toGeographic(input); expect(expectedOutput.geometries[0].coordinates[0]).toBeCloseTo(-122.6764000000, 10); expect(expectedOutput.geometries[0].coordinates[1]).toBeCloseTo(45.5165000000, 10); expect(expectedOutput.geometries[1].coordinates[0]).toBeCloseTo(-122.6764000000, 10); expect(expectedOutput.geometries[1].coordinates[1]).toBeCloseTo(45.5165000000, 10); }); });