mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-15 21:48:20 +02:00
add d3.geo.length
This commit is contained in:
@@ -115,6 +115,7 @@ D3_FILES = \
|
||||
node_modules/d3/src/behavior/zoom.js \
|
||||
node_modules/d3/src/core/index.js \
|
||||
node_modules/d3/src/event/index.js \
|
||||
node_modules/d3/src/geo/length.js \
|
||||
node_modules/d3/src/geo/mercator.js \
|
||||
node_modules/d3/src/geo/path.js \
|
||||
node_modules/d3/src/geo/stream.js \
|
||||
|
||||
Vendored
+109
-70
@@ -2075,6 +2075,115 @@ function d3_timer_sweep() {
|
||||
return time;
|
||||
}
|
||||
d3.geo = {};
|
||||
|
||||
d3.geo.stream = function(object, listener) {
|
||||
if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {
|
||||
d3_geo_streamObjectType[object.type](object, listener);
|
||||
} else {
|
||||
d3_geo_streamGeometry(object, listener);
|
||||
}
|
||||
};
|
||||
|
||||
function d3_geo_streamGeometry(geometry, listener) {
|
||||
if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {
|
||||
d3_geo_streamGeometryType[geometry.type](geometry, listener);
|
||||
}
|
||||
}
|
||||
|
||||
var d3_geo_streamObjectType = {
|
||||
Feature: function(feature, listener) {
|
||||
d3_geo_streamGeometry(feature.geometry, listener);
|
||||
},
|
||||
FeatureCollection: function(object, listener) {
|
||||
var features = object.features, i = -1, n = features.length;
|
||||
while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);
|
||||
}
|
||||
};
|
||||
|
||||
var d3_geo_streamGeometryType = {
|
||||
Sphere: function(object, listener) {
|
||||
listener.sphere();
|
||||
},
|
||||
Point: function(object, listener) {
|
||||
object = object.coordinates;
|
||||
listener.point(object[0], object[1], object[2]);
|
||||
},
|
||||
MultiPoint: function(object, listener) {
|
||||
var coordinates = object.coordinates, i = -1, n = coordinates.length;
|
||||
while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);
|
||||
},
|
||||
LineString: function(object, listener) {
|
||||
d3_geo_streamLine(object.coordinates, listener, 0);
|
||||
},
|
||||
MultiLineString: function(object, listener) {
|
||||
var coordinates = object.coordinates, i = -1, n = coordinates.length;
|
||||
while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);
|
||||
},
|
||||
Polygon: function(object, listener) {
|
||||
d3_geo_streamPolygon(object.coordinates, listener);
|
||||
},
|
||||
MultiPolygon: function(object, listener) {
|
||||
var coordinates = object.coordinates, i = -1, n = coordinates.length;
|
||||
while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);
|
||||
},
|
||||
GeometryCollection: function(object, listener) {
|
||||
var geometries = object.geometries, i = -1, n = geometries.length;
|
||||
while (++i < n) d3_geo_streamGeometry(geometries[i], listener);
|
||||
}
|
||||
};
|
||||
|
||||
function d3_geo_streamLine(coordinates, listener, closed) {
|
||||
var i = -1, n = coordinates.length - closed, coordinate;
|
||||
listener.lineStart();
|
||||
while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);
|
||||
listener.lineEnd();
|
||||
}
|
||||
|
||||
function d3_geo_streamPolygon(coordinates, listener) {
|
||||
var i = -1, n = coordinates.length;
|
||||
listener.polygonStart();
|
||||
while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);
|
||||
listener.polygonEnd();
|
||||
}
|
||||
|
||||
d3.geo.length = function(object) {
|
||||
d3_geo_lengthSum = 0;
|
||||
d3.geo.stream(object, d3_geo_length);
|
||||
return d3_geo_lengthSum;
|
||||
};
|
||||
|
||||
var d3_geo_lengthSum;
|
||||
|
||||
var d3_geo_length = {
|
||||
sphere: d3_noop,
|
||||
point: d3_noop,
|
||||
lineStart: d3_geo_lengthLineStart,
|
||||
lineEnd: d3_noop,
|
||||
polygonStart: d3_noop,
|
||||
polygonEnd: d3_noop
|
||||
};
|
||||
|
||||
function d3_geo_lengthLineStart() {
|
||||
var λ0, sinφ0, cosφ0;
|
||||
|
||||
d3_geo_length.point = function(λ, φ) {
|
||||
λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);
|
||||
d3_geo_length.point = nextPoint;
|
||||
};
|
||||
|
||||
d3_geo_length.lineEnd = function() {
|
||||
d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;
|
||||
};
|
||||
|
||||
function nextPoint(λ, φ) {
|
||||
var sinφ = Math.sin(φ *= d3_radians),
|
||||
cosφ = Math.cos(φ),
|
||||
t = abs((λ *= d3_radians) - λ0),
|
||||
cosΔλ = Math.cos(t);
|
||||
d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);
|
||||
λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;
|
||||
}
|
||||
}
|
||||
function d3_identity(d) {
|
||||
return d;
|
||||
}
|
||||
@@ -2683,76 +2792,6 @@ function d3_adderSum(a, b, o) {
|
||||
o.t = (a - av) + (b - bv); // a_roundoff + b_roundoff
|
||||
}
|
||||
|
||||
d3.geo.stream = function(object, listener) {
|
||||
if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {
|
||||
d3_geo_streamObjectType[object.type](object, listener);
|
||||
} else {
|
||||
d3_geo_streamGeometry(object, listener);
|
||||
}
|
||||
};
|
||||
|
||||
function d3_geo_streamGeometry(geometry, listener) {
|
||||
if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {
|
||||
d3_geo_streamGeometryType[geometry.type](geometry, listener);
|
||||
}
|
||||
}
|
||||
|
||||
var d3_geo_streamObjectType = {
|
||||
Feature: function(feature, listener) {
|
||||
d3_geo_streamGeometry(feature.geometry, listener);
|
||||
},
|
||||
FeatureCollection: function(object, listener) {
|
||||
var features = object.features, i = -1, n = features.length;
|
||||
while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);
|
||||
}
|
||||
};
|
||||
|
||||
var d3_geo_streamGeometryType = {
|
||||
Sphere: function(object, listener) {
|
||||
listener.sphere();
|
||||
},
|
||||
Point: function(object, listener) {
|
||||
object = object.coordinates;
|
||||
listener.point(object[0], object[1], object[2]);
|
||||
},
|
||||
MultiPoint: function(object, listener) {
|
||||
var coordinates = object.coordinates, i = -1, n = coordinates.length;
|
||||
while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);
|
||||
},
|
||||
LineString: function(object, listener) {
|
||||
d3_geo_streamLine(object.coordinates, listener, 0);
|
||||
},
|
||||
MultiLineString: function(object, listener) {
|
||||
var coordinates = object.coordinates, i = -1, n = coordinates.length;
|
||||
while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);
|
||||
},
|
||||
Polygon: function(object, listener) {
|
||||
d3_geo_streamPolygon(object.coordinates, listener);
|
||||
},
|
||||
MultiPolygon: function(object, listener) {
|
||||
var coordinates = object.coordinates, i = -1, n = coordinates.length;
|
||||
while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);
|
||||
},
|
||||
GeometryCollection: function(object, listener) {
|
||||
var geometries = object.geometries, i = -1, n = geometries.length;
|
||||
while (++i < n) d3_geo_streamGeometry(geometries[i], listener);
|
||||
}
|
||||
};
|
||||
|
||||
function d3_geo_streamLine(coordinates, listener, closed) {
|
||||
var i = -1, n = coordinates.length - closed, coordinate;
|
||||
listener.lineStart();
|
||||
while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);
|
||||
listener.lineEnd();
|
||||
}
|
||||
|
||||
function d3_geo_streamPolygon(coordinates, listener) {
|
||||
var i = -1, n = coordinates.length;
|
||||
listener.polygonStart();
|
||||
while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);
|
||||
listener.polygonEnd();
|
||||
}
|
||||
|
||||
d3.geo.area = function(object) {
|
||||
d3_geo_areaSum = 0;
|
||||
d3.geo.stream(object, d3_geo_area);
|
||||
|
||||
Reference in New Issue
Block a user