使用D3和topojson时路径混乱?

时间:2015-03-28 19:02:44

标签: javascript d3.js maps topojson map-projections

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

现在,我跟随迈克博斯托克的Let's Make a Map指南,但我没有使用英国,而是使用加拿大艾伯塔省选区的地图。更改Bostock的代码后,使用Alberta数据here is what appears加载我自己的TopoJSON。

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

有一点需要注意的是,JS控制台中出现了一个错误:Error: Invalid value for <path> attribute这使我怀疑TopoJSON数据中是否存在某些问题,但是当我将相同的数据输入Mapshaper,地图显示没有错误。

因此,我有点卡住并且不确定如何继续。感谢任何形式的帮助/指导,谢谢!

1 个答案:

答案 0 :(得分:3)

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

更新

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

要创建“未投影”文件,我将提供的zip文件作为矢量图层加载到QGIS中,然后将其保存为新图层,但更改了坐标参考系统(CRS,投影换言之)过程,到WGS 84。

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

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

查看

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

回答你的意见中的几个问题:

  1. 该文件已由Elections Alberta投射,但可以在此过程的任何时候进行预测。您可以在任何时候在投影之间进行转换,事实上,当您在javascript中应用投影时,您可以进行转换。该投影仅将来自一个系统的坐标转换为来自另一个系统的坐标。在你的情况下,我们将从NAD83 / Alberta Transverse Mercator转到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中(因为这通常是我们开始的)然后加载到Elections Alberta数据(包括.prj文件中),确定存在不匹配)并且看到没有重叠。这是一个赠品,其中一个与另一个投射不同。既然你是Stack Overflow的问题,我认为选举艾伯塔省的数据可能是正确的。就在那时我开始查看你的topojson文件,看到那里的坐标很大,即。在 - / + 180, - / + 90之外,这意味着它可能在创建之前进行预测。

    d3可以根据http://bl.ocks.org/mbostock/5557726传入topojson投影来加载已投影的null数据,但在这种情况下,它会预期topojson中的坐标{1}}文件为像素,如果您查看topojson文件,它们太大而无法被视为像素值,因此它们无法正常工作。

  3. 我刚做了一个

    ogr2ogr -t_srs crs:84 alberta_wgs84 EDs_Act2010_FINAL.shp
    

    然后我使用topojson将其转换为正确加载,根据我的QGIS重新投影文件。所以我不确定你的转换会出现什么问题。重新投影如何完成并不重要,只是确实如此。你肯定是在正确的轨道上。