gpt4 book ai didi

javascript - 为什么这个 TopoJSON 用 D3 渲染得这么小? (简单的例子)

转载 作者:行者123 更新时间:2023-11-30 15:02:17 24 4
gpt4 key购买 nike

我正在尝试做一些非常简单的事情。我有纽约所有国会选区的 GeoJSON 文件,我只是希望能够在我的 SVG 元素中查看它。我将其转换为 TopoJSON 并尝试遵循 this tutorial (除了我尝试使用新更新的 d3 v4 API)。主要问题是 map ,我认为,确实得到了渲染,但它非常小。如果我尝试将其放大,那么我将完全看不到 map 。

这是我的 html 和 d3 js:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>NY State Districts Demo</title>
</head>
<body>
<h1>Hello</h1>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.10.2/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/topojson/3.0.2/topojson.js"></script>
<script>
/* JavaScript goes here */
var width = 960, height = 1160;
var svg = d3.select("body").append("svg").attr("width", width).attr("height", height);

d3.json("./ny_bounds.json", function(error, ny){
if(error) return console.error(error);
console.log(ny);
svg.append("path")
.datum(topojson.feature(ny, ny.objects.ny_bounds))
.attr("d", d3.geoPath().projection(d3.geoAlbersUsa()));
});
</script>
</body>
</html>

Here是指向相关 TopoJSON 的链接。

我承认我对 d3 和 geo/topoJSON 了解不多,但我只是停留在这一点上。如果有人有任何资源可以让我了解更多关于这些主题的信息,那也很好。但正如我之前所说,主要问题是 map 太小,我似乎无法将其居中/缩放。

在此先感谢您的帮助。

最佳答案

您正在使用旨在投影整个美国(包括夏威夷和阿拉斯加)的点的投影来投影数据。纽约将是该投影区域的一小部分。缩放任何 map 投影都会放大到投影的中心 - d3 不知道要放大到特定位置,因此当您放大时,纽约将从投影的边缘脱落。

由于 AlbersUsa 投影是复合投影(允许包含阿拉斯加、夏威夷),它实际上是几个 Albers 投影组合在一个平面上。由于其复合性质,它更难操纵。为了简单起见,我建议使用普通的阿尔伯斯投影。这还允许您针对纽约州定制投影。

阿尔伯斯投影有两条标准纬线,它们是与地球表面相交的投影平面的平行线(它是圆锥投影)。标准纬线应位于感兴趣的区域,一条在下半部分,一条在上半部分(因为这些是与地球相交的纬线,所以沿着这些纬线的失真会最小化)。对于纽约州,北纬 41 度和 44 度等平行线可能有效。

您还需要使投影居中。为此,您需要感兴趣区域的地理中心。纽约中心位于北纬 42.954 度和西经 75.527 度(东经 -75.527 度)。要使阿尔伯斯投影居中,请在 x 轴上旋转(当我们在我们下方旋转地球时,按经度的倒数旋转)并以 y 轴为中心。总的来说,这看起来像:

d3.geoAlbers()
.center([0,42.954])
.rotate([75.527,0])
.parallels([41,44])
.translate([width/2,height/2])
.scale(k) // scale factor

现在您需要确保您的 geoPath 使用此投影(是的,如果您的宽度或高度不是默认的 960x500,您需要指定平移,因为它以投影的中心为中心)。比例放大,数字越大,2000 倍应该让您开始。

关于javascript - 为什么这个 TopoJSON 用 D3 渲染得这么小? (简单的例子),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46327421/

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