使用 D3 和 topojson 时混淆路径?

Confusing paths when using D3 and topojson?

一点预警:还是D3新手

现在,我正在关注 Mike Bostock 的 Let's Make a Map guide, but instead of the UK, I'm using a map of the electoral districts in Alberta, Canada. After altering Bostock's code to load in my own TopoJSON with the Alberta data, here is what appears

我花了很多时间试图弄清楚我是否没有发现我的代码中的错误,或者地理数据中是否可能存在某种错误,但我一直无法缩小范围问题可能出在哪里。基于这里的其他一些问题,我怀疑这可能与预测有关,也许与 Bostock 代表英国的方式与我需要做的正确代表艾伯塔省的方式不同有关,但是说到这里我真的很茫然

需要注意的一件事是 JS 控制台中弹出一个错误:Error: Invalid value for <path> attribute 这让我怀疑 TopoJSON 数据是否有问题,但是当我将相同的数据拉入 Mapshaper 时,地图显示没有错误。

因此,我有点卡住了,不确定如何继续。任何形式的 help/direction 都非常感谢,谢谢!

您的地理数据有问题。好像已经预测过了?我将它加载到 QGIS 中,虽然数据看起来不错,但似乎已经应用了投影。我在 http://www.electionsalberta.ab.ca/Public%20Website/112.htm 找到了一些阿尔伯塔选区数据,当我从那里加载 shapefile 时,两者不重叠。不确定发生了什么,但是在显示之前进行的任何处理都导致了一些问题。另外,尝试使用 fill: nonestroke: black 设计你的路径,让它看起来更整洁

更新:

在 Elections Alberta 提供的 zip 文件中,有一个包含投影的 .prj 文件,您怀疑它是 NAD83,Alberta Transverse Mercator。 Mapshaper 和其他人向您展示了这个投影文件,然后生成了投影文件的 topojson。

为了创建一个 "unprojected" 文件,我将提供的 zip 作为矢量图层加载到 QGIS 中,然后将其另存为一个新层,但更改了坐标参考系统(CRS,其他投影words) 在这个过程中,到 WGS 84.

然后我使用 topojson 将保存的结果转换为 topojson 文件。

我创建了一个 gist/block 供您查看如何使用您的代码和我更新的文件。您可以在 http://bl.ocks.org/benlyall/4f2e4ed1e8f4bdb8457c

查看

我真正做的就是使用与 QGIS 不同的坐标参考系统保存文件,然后将其加载到您现有的页面中。希望这能有所帮助。

根据您的评论回答几个问题:

  1. 该文件已由艾伯塔省选举委员会放映,但它可能会在该过程的任何时候被放映。您可以随时在投影之间进行转换,事实上,当您在 javascript 中应用投影时,您就可以进行转换。投影只是将一个系统的坐标转换为另一个系统的坐标。在您的情况下,我们将从 NAD83/Alberta 横向墨卡托投影到 WGS 84 回到墨卡托投影。有关 NAD83/Alberta TM 的更多信息,请查看 http://georepository.com/crs_3403/NAD83-CSRS-Alberta-10-TM-Resource.html

  2. Mapshaper 和 topojson 正在读取您的 shapefile 并为您显示。它对您来说可能看起来不错,因为这就是您在地图上看到该区域时的样子。从中不能立即清楚的是,源数据是经过预测的。我通过使用 WGS 84 投影将您的 topojson 数据加载到 QGIS 中(因为这通常是我们开始的)然后加载到艾伯塔省选举数据(其中包括 .prj 文件)来确定存在不匹配) 并看到没有重叠。这是一个赠品,其中一个与另一个的投影不同。由于您是在 Stack Overflow 上提问的人,我认为艾伯塔省选举数据可能是正确的。那时我开始查看您的 topojson 文件,发现其中的坐标很大,即。在-/+180,-/+90之外,这意味着它可能是在创建之前投影的。

    d3 可以加载已经投影的 topojson 数据,通过按照 http://bl.ocks.org/mbostock/5557726 传入 null 投影,但在这种情况下,它需要坐标你的 topojson 文件是像素,如果你查看你的 topojson 文件,它们太大而不能被视为像素值,所以它们不会那样工作。

  3. 我刚做了一个

    ogr2ogr -t_srs crs:84 alberta_wgs84 EDs_Act2010_FINAL.shp
    

    然后我使用 topojson 转换它并正确加载,根据我的 QGIS 重新投影文件。所以我不确定你的那个转换出了什么问题。重新投影是如何完成的并不重要,就是这样。你绝对是在正确的轨道上。