mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.6 KiB
47 lines
1.6 KiB
import {default as geoStream} from "../stream.js";
|
|
import boundsStream from "../path/bounds.js";
|
|
|
|
function fit(projection, fitBounds, object) {
|
|
var clip = projection.clipExtent && projection.clipExtent();
|
|
projection.scale(150).translate([0, 0]);
|
|
if (clip != null) projection.clipExtent(null);
|
|
geoStream(object, projection.stream(boundsStream));
|
|
fitBounds(boundsStream.result());
|
|
if (clip != null) projection.clipExtent(clip);
|
|
return projection;
|
|
}
|
|
|
|
export function fitExtent(projection, extent, object) {
|
|
return fit(projection, function(b) {
|
|
var w = extent[1][0] - extent[0][0],
|
|
h = extent[1][1] - extent[0][1],
|
|
k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
|
|
x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
|
|
y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
|
|
projection.scale(150 * k).translate([x, y]);
|
|
}, object);
|
|
}
|
|
|
|
export function fitSize(projection, size, object) {
|
|
return fitExtent(projection, [[0, 0], size], object);
|
|
}
|
|
|
|
export function fitWidth(projection, width, object) {
|
|
return fit(projection, function(b) {
|
|
var w = +width,
|
|
k = w / (b[1][0] - b[0][0]),
|
|
x = (w - k * (b[1][0] + b[0][0])) / 2,
|
|
y = -k * b[0][1];
|
|
projection.scale(150 * k).translate([x, y]);
|
|
}, object);
|
|
}
|
|
|
|
export function fitHeight(projection, height, object) {
|
|
return fit(projection, function(b) {
|
|
var h = +height,
|
|
k = h / (b[1][1] - b[0][1]),
|
|
x = -k * b[0][0],
|
|
y = (h - k * (b[1][1] + b[0][1])) / 2;
|
|
projection.scale(150 * k).translate([x, y]);
|
|
}, object);
|
|
}
|
|
|