turf-extent
Advanced tools
Comparing version 1.0.0 to 1.0.2
28
bench.js
@@ -1,11 +0,11 @@ | ||
var extent = require('./'); | ||
global.extent = require('./'); | ||
var Benchmark = require('benchmark'); | ||
var fs = require('fs'); | ||
var fc = require('./geojson/FeatureCollection'); | ||
var pt = require('./geojson/Point'); | ||
var line = require('./geojson/LineString'); | ||
var poly = require('./geojson/Polygon'); | ||
var multiLine = require('./geojson/MultiLineString'); | ||
var multiPoly = require('./geojson/MultiPolygon'); | ||
global.fc = require('./geojson/FeatureCollection'); | ||
global.pt = require('./geojson/Point'); | ||
global.line = require('./geojson/LineString'); | ||
global.poly = require('./geojson/Polygon'); | ||
global.multiLine = require('./geojson/MultiLineString'); | ||
global.multiPoly = require('./geojson/MultiPolygon'); | ||
@@ -15,18 +15,18 @@ var suite = new Benchmark.Suite('turf-extent'); | ||
.add('turf-extent#FeatureCollection',function () { | ||
extent(fc); | ||
global.extent(global.fc); | ||
}) | ||
.add('turf-extent#Point',function () { | ||
extent(pt); | ||
global.extent(global.pt); | ||
}) | ||
.add('turf-extent#LineString',function () { | ||
extent(line); | ||
global.extent(global.line); | ||
}) | ||
.add('turf-extent#Polygon',function () { | ||
extent(poly); | ||
global.extent(global.poly); | ||
}) | ||
.add('turf-extent#MultiLineString',function () { | ||
extent(multiLine); | ||
global.extent(global.multiLine); | ||
}) | ||
.add('turf-extent#MultiPolygon',function () { | ||
extent(multiPoly); | ||
global.extent(global.multiPoly); | ||
}) | ||
@@ -39,2 +39,2 @@ .on('cycle', function (event) { | ||
}) | ||
.run(); | ||
.run(); |
181
index.js
var flatten = require('flatten'); | ||
/** | ||
* Calculates the extent of all features and returns a bounding box. | ||
* | ||
* @alias turf/extent | ||
* @param {GeoJSON-Object} input - any valid GeoJSON Object | ||
* @return {Array<number>} extent - the bounding box of the GeoJSON given | ||
* as an array in WSEN order. | ||
* @example | ||
* var extent = require('turf-extent') | ||
* var fs = require('fs') | ||
* var fc = JSON.parse(fs.readFileSync('/path/to/myFeatureCollection.geojson')) | ||
* var bbox = extent(fc) | ||
* console.log(bbox) // [minX, minY, maxX, maxY] | ||
*/ | ||
module.exports = function(layer){ | ||
var xmin = Infinity, | ||
ymin = Infinity, | ||
xmax = -Infinity, | ||
ymax = -Infinity; | ||
if(layer.type === 'FeatureCollection'){ | ||
for(var i in layer.features){ | ||
var coordinates; | ||
switch(layer.features[i].geometry.type){ | ||
case 'Point': | ||
coordinates = [layer.features[i].geometry.coordinates]; | ||
break | ||
case 'LineString': | ||
coordinates = layer.features[i].geometry.coordinates; | ||
break | ||
case 'Polygon': | ||
coordinates = layer.features[i].geometry.coordinates; | ||
coordinates = flatCoords(coordinates); | ||
break | ||
case 'MultiPoint': | ||
coordinates = layer.features[i].geometry.coordinates; | ||
break | ||
case 'MultiLineString': | ||
coordinates = layer.features[i].geometry.coordinates; | ||
coordinates = flatCoords(coordinates); | ||
break | ||
case 'MultiPolygon': | ||
coordinates = layer.features[i].geometry.coordinates; | ||
coordinates = flatCoords(coordinates); | ||
break | ||
} | ||
if(!layer.features[i].geometry && layer.features[i].properties){ | ||
return new Error('Unknown Geometry Type'); | ||
} | ||
for(var n in coordinates){ | ||
if(xmin > coordinates[n][0]){ | ||
xmin = coordinates[n][0]; | ||
} | ||
if(ymin > coordinates[n][1]){ | ||
ymin = coordinates[n][1]; | ||
} | ||
if(xmax < coordinates[n][0]){ | ||
xmax = coordinates[n][0]; | ||
} | ||
if(ymax < coordinates[n][1]){ | ||
ymax = coordinates[n][1]; | ||
} | ||
} | ||
} | ||
var bbox = [xmin, ymin, xmax, ymax] | ||
return bbox | ||
} | ||
else{ | ||
var coordinates | ||
var geometry | ||
if(layer.type === 'Feature'){ | ||
geometry = layer.geometry | ||
} | ||
else{ | ||
geometry = layer | ||
} | ||
switch(geometry.type){ | ||
var extent = [Infinity, Infinity, -Infinity, -Infinity]; | ||
var features = []; | ||
if (layer.type === 'FeatureCollection') features = layer.features; | ||
else if (layer.type === 'Feature') features = [layer]; | ||
else features = [{ geometry: layer }]; | ||
for(var i = 0; i < features.length; i++){ | ||
var coords = features[i].geometry.coordinates; | ||
switch(features[i].geometry.type){ | ||
case 'Point': | ||
coordinates = [geometry.coordinates] | ||
break | ||
extent0(coords, extent); | ||
break; | ||
case 'LineString': | ||
coordinates = geometry.coordinates | ||
break | ||
case 'MultiPoint': | ||
extent1(coords, extent); | ||
break; | ||
case 'Polygon': | ||
coordinates = geometry.coordinates | ||
coordinates = flatCoords(coordinates) | ||
break | ||
case 'MultiPoint': | ||
coordinates = geometry.coordinates | ||
break | ||
case 'MultiLineString': | ||
coordinates = geometry.coordinates | ||
coordinates = flatCoords(coordinates) | ||
break | ||
extent2(coords, extent); | ||
break; | ||
case 'MultiPolygon': | ||
coordinates = geometry.coordinates | ||
coordinates = flatCoords(coordinates) | ||
break | ||
extent3(coords, extent); | ||
break; | ||
default: | ||
return new Error('Unknown Geometry Type'); | ||
} | ||
if(!geometry){ | ||
return new Error('No Geometry Found'); | ||
} | ||
return extent; | ||
}; | ||
function extent0(coord, extent) { | ||
if(extent[0] > coord[0]) extent[0] = coord[0]; | ||
if(extent[1] > coord[1]) extent[1] = coord[1]; | ||
if(extent[2] < coord[0]) extent[2] = coord[0]; | ||
if(extent[3] < coord[1]) extent[3] = coord[1]; | ||
} | ||
function extent1(coords, extent) { | ||
for(var i = 0; i < coords.length; i++){ | ||
var coord = coords[i]; | ||
if(extent[0] > coord[0]) extent[0] = coord[0]; | ||
if(extent[1] > coord[1]) extent[1] = coord[1]; | ||
if(extent[2] < coord[0]) extent[2] = coord[0]; | ||
if(extent[3] < coord[1]) extent[3] = coord[1]; | ||
} | ||
} | ||
function extent2(coords, extent) { | ||
for(var i = 0; i < coords.length; i++){ | ||
for(var j = 0; j < coords[i].length; j++){ | ||
var coord = coords[i][j]; | ||
if(extent[0] > coord[0]) extent[0] = coord[0]; | ||
if(extent[1] > coord[1]) extent[1] = coord[1]; | ||
if(extent[2] < coord[0]) extent[2] = coord[0]; | ||
if(extent[3] < coord[1]) extent[3] = coord[1]; | ||
} | ||
for(var n in coordinates){ | ||
if(xmin > coordinates[n][0]){ | ||
xmin = coordinates[n][0]; | ||
} | ||
} | ||
function extent3(coords, extent) { | ||
for(var i = 0; i < coords.length; i++){ | ||
for(var j = 0; j < coords[i].length; j++){ | ||
for(var k = 0; k < coords[i][j].length; k++){ | ||
var coord = coords[i][j][k]; | ||
if(extent[0] > coord[0]) extent[0] = coord[0]; | ||
if(extent[1] > coord[1]) extent[1] = coord[1]; | ||
if(extent[2] < coord[0]) extent[2] = coord[0]; | ||
if(extent[3] < coord[1]) extent[3] = coord[1]; | ||
} | ||
if(ymin > coordinates[n][1]){ | ||
ymin = coordinates[n][1]; | ||
} | ||
if(xmax < coordinates[n][0]){ | ||
xmax = coordinates[n][0]; | ||
} | ||
if(ymax < coordinates[n][1]){ | ||
ymax = coordinates[n][1]; | ||
} | ||
} | ||
var bbox = [xmin, ymin, xmax, ymax]; | ||
return bbox; | ||
} | ||
} | ||
function flatCoords(coords){ | ||
var newCoords = []; | ||
coords = flatten(coords); | ||
coords.forEach(function(c, i){ | ||
if(i % 2 == 0) // if is even | ||
newCoords.push([c, coords[i+1]]); | ||
}) | ||
return newCoords; | ||
} |
{ | ||
"name": "turf-extent", | ||
"version": "1.0.0", | ||
"version": "1.0.2", | ||
"description": "turf extent module", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
11104
364
1