将默认 D3 投影拟合到 Daily Kos Congressional District Hexmap

Fit Default D3 Projection to Daily Kos Congressional District Hexmap

The Daily Kos 有一个独特的“国会选区 Hexmap - CD - 仅限国会选区(50 个州)”形状文件 - https://docs.google.com/spreadsheets/d/1LrBXlqrtSZwyYOkpEEXFwQggvtR0bHHTxs9kq4kjOjw/edit#gid=1250379179 - 这非常适合我们的用例。但我 运行 遇到了使其适合我们设计的容器尺寸的问题。传统上,我使用一个 TopoJSON 文件,即美国各州,使用 Albers USA 投影(或其他投影)对其进行投影,然后使用容器的宽度和高度来计算形状的最佳 path - 见下文。

在这个“Congressional District Hexmap”案例中,我认为 shapefile 已经投影,因此当我应用 Albers 或 Mercator 投影时,它会扭曲它的外观。

因此我想知道是否有 null 或默认投影仍然允许我使用 fitSize() 辅助函数将形状缩放到容器?

Therefore I was wondering if there is a null or default projection that will still allow me to use the fitSize() helper function to scale the shapes to the container?

null 传递给 path.projection() 对您没有帮助;但是,d3.geoIdentity 会。默认情况下,它与空投影相同,因为它采用输入坐标并在没有变换或投影的情况下输出它们。但是,它确实提供了对许多有用方法的访问,例如 scaletranslate,以及 fitSizefitExtent 等(这些只是设置比例和翻译毕竟)。文档有更多信息 here.

但是,根据您的数据源,您可能需要反映 y 坐标,因为地理 y 值随着向北移动(通常)而增加,而 SVG/Canvas y 值随着向下移动(向南,经常)。

所以你可以使用:

var projection = d3.geoIdentity()
                   .reflectY(true) // if needed.
                   .fitSize([width,height],geoJsonObject)

用你的路径生成器。