gpt4 book ai didi

d3.js - D3.geo : Spherical arcs rather than straight lines for parallels?

转载 作者:行者123 更新时间:2023-12-04 13:11:20 25 4
gpt4 key购买 nike

我刚刚制作了一个 D3js 地球定位器,它看起来像这样:

enter image description here

如果仔细观察,红色方块看起来很难看,因为它不遵循地球的曲线。我有十进制度数的区域边界框:

var bb = {W:-5.0, N:50.0, E:10.0, S:40.0 }

我画的线如下:
svg.append("path")
.datum({type: "LineString", coordinates:
[[-5, 40], [-5, 50], [10, 50], [10, 40], [-5, 40]]
})
.attr("d", path);

对于更大的区域,它甚至是与预期相反的曲线(对于边界框):

enter image description here

如何添加相当优雅的球弧?

最佳答案

enter image description here

给定一个已知的十进制度边界框( dig in start here for bb ),例如:

  bounds = [[-50.8,20.0][30,51.5]];
WNES0 = bounds[0][0], // West "W":-50.8
WNES1 = bounds[1][2], // North "N": 51.5
WNES2 = bounds[1][0], // East "E": 30
WNES3 = bounds[0][3], // South "S": 20.0

需要一些数学。
// *********** MATH TOOLKIT ********** //
function parallel(φ, λ0, λ1) {
if (λ0 > λ1) λ1 += 360;
var dλ = λ1 - λ0,
step = dλ / Math.ceil(dλ);
return d3.range(λ0, λ1 + .5 * step, step).map(function(λ) { return [normalise(λ), φ]; });
}
function normalise(x) {
return (x + 180) % 360 - 180;
}

然后,让我们计算多边形的坐标并投影它:
// *********** APPEND SHAPES ********** //
svg.append("path")
.datum({type: "Polygon", coordinates: [
[[WNES0,WNES3]]
.concat(parallel(WNES1, WNES0, WNES2))
.concat(parallel(WNES3, WNES0, WNES2).reverse())
]})
.attr("d", path)
.style({'fill': '#B10000', 'fill-opacity': 0.3, 'stroke': '#B10000', 'stroke-linejoin': 'round'})
.style({'stroke-width': 1 });

第180个子午线交点:第 180 条经络上的盒子需要特殊管理。例如,在 155⁰ East 和 -155 West 之间定位一组太平洋岛屿最初会给出......
enter image description here
...正确旋转(+180⁰):
enter image description here
...并使用正确的拳击:
enter image description here

本地化器现在完美了! Live demo on blocks
var bb = { "item":"India", "W": 67.0, "N":37.5, "E": 99.0, "S": 5.0 }, 
localisator("body", 200, bb.item, bb.W, bb.N, bb.E, bb.S);

enter image description here

+1 欢迎。

关于d3.js - D3.geo : Spherical arcs rather than straight lines for parallels?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25415885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com