有点警告:仍然是D3的新手。

目前,我正在跟着Mike Bostock的Let's Make a Map指南,但我使用的是加拿大艾伯塔省选举区的地图,而不是英国。更改Bostock的代码以使用Alberta数据here is what appears将其加载到我自己的TopoJSON中之后。

我花了很多时间试图弄清楚我是不是在代码中发现错误,还是地理数据中可能存在某种错误,但是我一直无法精确地找出问题所在位于。基于此处的其他一些问题,我怀疑这可能与预测有关,也许与博斯托克代表英国的方式与我正确代表艾伯塔省所需要做的差异有关,但是在这方面,我真的很茫然。

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

因此,我有点困惑,不确定如何进行。任何帮助/指导表示赞赏,谢谢!

最佳答案

您的地理数据有问题。看起来已经投影了吗?我将其加载到QGIS中,虽然数据看起来不错,但似乎已经应用了投影。我在http://www.electionsalberta.ab.ca/Public%20Website/112.htm找到了一些艾伯塔省选举区数据,当我从那里加载shapefile时,两者没有重叠。不知道发生了什么,但是在显示之前所做的任何处理都导致了一些问题。另外,尝试使用fill: nonestroke: black设置路径样式,使其看起来更整洁

更新:

在艾伯塔省选举组织提供的压缩文件中,有一个.prj文件,其中包含投影,您怀疑是阿尔伯塔省横轴墨卡托NAD83。 Mapshaper和其他人正在向您显示此投影文件,然后生成该投影文件的topojson。

为了创建一个“未投影”文件,我将提供的zip作为矢量层加载到QGIS中,然后将其保存为新层,但是在此过程中将“坐标参考系统”(换句话说就是“ CRS”,即投影)更改为WGS 84。

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

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

我实际上所做的就是用与QGIS不同的“坐标参考系统”保存文件,然后将其加载到现有页面中。希望这会有所帮助。

要从您的评论中回答几个问题:


该文件已经由艾伯塔选举组织(Elections Alberta)进行了投影,但可以在此过程中的任何时候进行投影。您可以随时在投影之间进行转换,实际上,当您在JavaScript中应用投影时就可以进行转换。投影只是将一个系统的坐标转换为另一系统的坐标。在您的情况下,我们将从NAD83 /艾伯塔省横向墨卡托(Alberta Transverse Mercator)到WGS 84,再回到墨卡托投影。有关NAD83 / Alberta TM的更多信息,请查看http://georepository.com/crs_3403/NAD83-CSRS-Alberta-10-TM-Resource.html
Mapshaper和topojson正在读取您的shapefile并为您显示。您可能看起来还不错,因为这就是您在地图上看到该区域时的样子。尚不清楚的是,源数据已投影。我通过将您的topojson数据加载到带有WGS 84投影的QGIS中来确定不匹配(因为这通常是我们开始的内容),然后加载到Elections Alberta数据(其中包括.prj文件)中,没有重叠。有点偏见,因为其中一个的预测与另一个不同。由于您是问堆栈溢出问题的人,因此我认为艾伯塔省选举数据可能是正确的。从那时起,我开始查看您的topojson文件,并发现其中的坐标很大。在-/ + 180,-/ + 90之外,这意味着它可能是在创建之前投影的。

d3可以通过按http://bl.ocks.org/mbostock/5557726传递topojson投影来加载已经投影的null数据,但是在这种情况下,它希望topojson文件中的坐标为像素,如果您看起来在您的topojson文件中,它们太大了,无法视为像素值,因此它们将无法正常工作。
我只是做了一个

ogr2ogr -t_srs crs:84 alberta_wgs84 EDs_Act2010_FINAL.shp


然后根据我的QGIS重新投影文件,使用topojson对其进行了转换并正确加载。因此,我不确定您的转换出了什么问题。重投影的完成方式无关紧要。您绝对是在正确的轨道上。

关于javascript - 使用D3和topojson时路径困惑?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29321311/

10-13 01:36