| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import {hasOwnProperty} from "./object.js";
- // Computes the bounding box of the specified hash of GeoJSON objects.
- export default function(objects) {
- var x0 = Infinity,
- y0 = Infinity,
- x1 = -Infinity,
- y1 = -Infinity;
- function boundGeometry(geometry) {
- if (geometry != null && hasOwnProperty.call(boundGeometryType, geometry.type)) boundGeometryType[geometry.type](geometry);
- }
- var boundGeometryType = {
- GeometryCollection: function(o) { o.geometries.forEach(boundGeometry); },
- Point: function(o) { boundPoint(o.coordinates); },
- MultiPoint: function(o) { o.coordinates.forEach(boundPoint); },
- LineString: function(o) { boundLine(o.arcs); },
- MultiLineString: function(o) { o.arcs.forEach(boundLine); },
- Polygon: function(o) { o.arcs.forEach(boundLine); },
- MultiPolygon: function(o) { o.arcs.forEach(boundMultiLine); }
- };
- function boundPoint(coordinates) {
- var x = coordinates[0],
- y = coordinates[1];
- if (x < x0) x0 = x;
- if (x > x1) x1 = x;
- if (y < y0) y0 = y;
- if (y > y1) y1 = y;
- }
- function boundLine(coordinates) {
- coordinates.forEach(boundPoint);
- }
- function boundMultiLine(coordinates) {
- coordinates.forEach(boundLine);
- }
- for (var key in objects) {
- boundGeometry(objects[key]);
- }
- return x1 >= x0 && y1 >= y0 ? [x0, y0, x1, y1] : undefined;
- }
|