d3.geo.area: return positive areas.
This commit is contained in:
Родитель
7860b0d31e
Коммит
e0c91c1e27
|
@ -5519,7 +5519,7 @@
|
|||
λ0 = λ, φ0 = φ;
|
||||
cosφ0 = cosφ, sinφ0 = sinφ;
|
||||
}
|
||||
return area > 2 * π && area <= 4 * π ? 4 * π - area : area <= -2 * π && area > -4 * π ? area + 4 * π : area;
|
||||
return Math.abs(area < -ε ? 4 * π + area : area);
|
||||
}
|
||||
var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {
|
||||
return Math.sqrt(2 / (1 + cosλcosφ));
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -13,7 +13,7 @@ var d3_geo_areaType = d3_geo_type({
|
|||
Feature: function(feature) { return d3_geo_areaType.geometry(feature.geometry); },
|
||||
FeatureCollection: function(collection) { return d3.sum(collection.features, d3_geo_areaType.Feature); },
|
||||
GeometryCollection: function(collection) { return d3.sum(collection.geometries, d3_geo_areaType.geometry); },
|
||||
geometry: function(geometry) { return d3_geo_areaType[geometry.type](geometry); } // TODO add 3rd argument to d3.sum?
|
||||
geometry: function(geometry) { return d3_geo_areaType[geometry.type](geometry); }
|
||||
});
|
||||
|
||||
function d3_geo_areaPolygon(polygon) {
|
||||
|
@ -58,7 +58,5 @@ function d3_geo_areaRing(ring) {
|
|||
λ0 = λ, φ0 = φ;
|
||||
cosφ0 = cosφ, sinφ0 = sinφ;
|
||||
}
|
||||
return area > 2 * π && area <= 4 * π ? 4 * π - area
|
||||
: area <= -2 * π && area > -4 * π ? area + 4 * π
|
||||
: area;
|
||||
return Math.abs(area < -ε ? 4 * π + area : area);
|
||||
}
|
||||
|
|
|
@ -55,6 +55,32 @@ suite.addBatch({
|
|||
"semilune": function(area) {
|
||||
assert.inDelta(area(d3.geo.graticule().extent([[0, 0], [90, 90]]).outline()), π / 2, 1e-5);
|
||||
}
|
||||
},
|
||||
"circles": {
|
||||
"hemisphere": function(area) {
|
||||
assert.inDelta(area(d3.geo.circle().angle(90)()), 2 * π, 1e-5);
|
||||
},
|
||||
"45°": function(area) {
|
||||
assert.inDelta(area(d3.geo.circle().angle(45).precision(.1)()), π * (2 - Math.SQRT2), 1e-5);
|
||||
},
|
||||
"45° North": function(area) {
|
||||
assert.inDelta(area(d3.geo.circle().angle(45).precision(.1).origin([0, 90])()), π * (2 - Math.SQRT2), 1e-5);
|
||||
},
|
||||
"45° South": function(area) {
|
||||
assert.inDelta(area(d3.geo.circle().angle(45).precision(.1).origin([0, -90])()), π * (2 - Math.SQRT2), 1e-5);
|
||||
},
|
||||
"135°": function(area) {
|
||||
assert.inDelta(area(d3.geo.circle().angle(135).precision(.1)()), π * (2 + Math.SQRT2), 1e-5);
|
||||
},
|
||||
"135° North": function(area) {
|
||||
assert.inDelta(area(d3.geo.circle().angle(135).precision(.1).origin([0, 90])()), π * (2 + Math.SQRT2), 1e-5);
|
||||
},
|
||||
"135° South": function(area) {
|
||||
assert.inDelta(area(d3.geo.circle().angle(135).precision(.1).origin([0, -90])()), π * (2 + Math.SQRT2), 1e-5);
|
||||
},
|
||||
"tiny": function(area) {
|
||||
assert.inDelta(area(d3.geo.circle().angle(1e-6)()), 0, 1e-6);
|
||||
}
|
||||
}
|
||||
},
|
||||
"MultiPolygon": {
|
||||
|
|
Загрузка…
Ссылка в новой задаче