2017-04-21 85 views
1

你好我有一个小问题上描绘topojson地图工作。 我topojson文件具有以下属性:问题与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文件和脚本中的缩放比例?

回答

0

被用在一个topojson比例因子是(from API documentation)部分:

变换它指定如何增量编码的整数 坐标转换到它们的天然的值(例如经度&纬度)。

虽然规模涉及(D3 API documentation):

比例因子线性对应于 投影点之间的距离;然而,绝对比例因子在整个预测中并不等于 。

我不认为人会帮助你与其他。特别是因为不同投影类型对于相似特征将具有不同的比例值。这适用即使在单个投影,例如墨卡托,这将需要不同的刻度值来放大相同大小的不同特征取决于他们在哪里 - 由于失真像任何投影。

随着D3墨卡托投影,为200的标度值几乎可以显示整个地球(960像素×500像素)。所以,你的功能将会很小(除非你的功能是整个星球)。使用更大比例值进行放大将有助于增加相对于视图端口的特征的大小。

但是,你在哪里缩放到?默认情况下,墨卡托投影将放大到非洲海岸以外的主子午线和赤道的交点[0,0]。您的功能可能不在大西洋的这一部分。您需要放大到特定区域 - 这可以通过使用d3投影的.center().rotate()方法中的一个或两个完成。

你需要知道在你感兴趣的区域的中间点,它并不需要非常精确。然后你需要设置投影的焦点。对于墨卡托投影,这可能是这样的:

.center(x,y) 

或(一个):

.rotate(-x,-y) 

其中x是你的兴趣和Y区域的中心经度的纬度您感兴趣的领域的中心。当然,你仍然需要扩展你的投影。至少为您的缩放参数开始一个小值,然后放大将有助于确保您至少位于右侧区域。