gpt4 book ai didi

javascript - Topojson 比例问题

转载 作者:行者123 更新时间:2023-11-28 04:44:01 25 4
gpt4 key购买 nike

您好,我在绘制 topojson map 时遇到了一些问题。我的 topojson 文件具有以下属性:

{"type":"Topology","arcs":[[[6566,5055] ... 
"transform":{"scale":[0.00014849648332078075,0.00015400850549819297], ...

在我的脚本上:

var projection = d3.geo.mercator()
.scale(5000)
.translate([width/2 , height/2 ])

当比例设置为200时,它非常小,几乎看不见;当以非常大的比例设置时,它完全是空白的。如何解释 topojson 文件和脚本中的比例?

最佳答案

使用的 topojson 上的比例因子是 ( from API documentation ) 的一部分:

a transform which specifies how to convert delta-encoded integer coordinates to their native values (such as longitude & latitude).

虽然规模与 ( D3 API documentation ) 相关:

The scale factor corresponds linearly to the distance between projected points; however, absolute scale factors are not equivalent across projections.

我不认为其中一个会帮助你解决另一个。特别是对于相似的特征,不同的投影类型将具有不同的比例值。这甚至适用于单个投影,例如墨卡托投影,它需要不同的比例值来放大相同大小的不同特征,具体取决于它们所在的位置 - 由于像任何投影一样的失真。

使用 D3 墨卡托投影,比例值为 200 可以显示几乎整个星球(960 像素 x 500 像素)。所以,你的特征会很小(除非你的特征是整个星球)。使用较大的比例值进行放大将有助于增加要素相对于视口(viewport)的大小。

但是,您要缩放到哪里?默认情况下,墨卡托投影将缩放到 [0,0],即本初子午线和赤道的交点,位于非洲海岸附近。您的特征可能不位于大西洋的这一部分。您需要缩放到特定区域 - 这是通过使用 d3 投影的 .center().rotate() 方法之一或两者来完成的。

您需要知道您感兴趣的区域中间的一个点,它不需要非常精确。然后您需要设置投影的聚焦位置。对于墨卡托投影,这可能如下所示:

.center(x,y)

或者(不是两者):

.rotate(-x,-y)

其中 x 是您感兴趣的区域中心的经度,y 是您感兴趣的区域中心的纬度。当然,您仍然需要缩放您的投影。从缩放参数的较小值开始,然后放大将有助于确保您至少位于正确区域的中心。

关于javascript - Topojson 比例问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43540087/

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