Javascript 使用D3和topojson时会混淆路径?

Javascript 使用D3和topojson时会混淆路径?,javascript,d3.js,maps,topojson,map-projections,Javascript,D3.js,Maps,Topojson,Map Projections,一点预先警告:仍然是D3的新手 现在,我遵循迈克·博斯托克的指南,但我使用的不是英国,而是加拿大阿尔伯塔省的选区地图。在修改博斯托克的代码以加载我自己的带有艾伯塔省数据的TopoJSON之后 我花了很多时间试图找出我的代码中是否没有发现错误,或者地理数据中是否可能存在某种错误,但我无法准确地缩小问题的范围。基于这里的一些其他问题,我怀疑这可能与预测有关,也许与博斯托克代表英国的方式与我代表阿尔伯塔省所需要做的不同有关,但说到这一点,我真的感到不知所措 需要注意的一点是,JS控制台中会弹出一个错误

一点预先警告:仍然是D3的新手

现在,我遵循迈克·博斯托克的指南,但我使用的不是英国,而是加拿大阿尔伯塔省的选区地图。在修改博斯托克的代码以加载我自己的带有艾伯塔省数据的TopoJSON之后

我花了很多时间试图找出我的代码中是否没有发现错误,或者地理数据中是否可能存在某种错误,但我无法准确地缩小问题的范围。基于这里的一些其他问题,我怀疑这可能与预测有关,也许与博斯托克代表英国的方式与我代表阿尔伯塔省所需要做的不同有关,但说到这一点,我真的感到不知所措

需要注意的一点是,JS控制台中会弹出一个错误:
error:Invalid value for attribute
,这让我怀疑TopoJSON数据中是否有错误,但是当我将相同的数据拉入Mapshaper时,地图会毫无错误地显示出来


因此,我有点卡住了,不确定如何继续。感谢您的任何帮助/指导,谢谢

您的地理数据有问题。看起来已经计划好了?我将其加载到QGIS中,虽然数据看起来不错,但似乎已经应用了投影。我在那里找到了一些艾伯塔省选区数据,当我从那里加载shapefile时,两者没有重叠。不确定发生了什么,但在显示之前所做的任何处理都会导致一些问题。另外,尝试使用
fill:none
stroke:black
设置路径样式,使其看起来更整洁

更新:

在艾伯塔省选举局提供的zip中,有一个
.prj
文件,其中包含投影,正如您所怀疑的,该投影是NAD83,艾伯塔省横轴墨卡托省。Mapshaper和其他人向您展示了这个投影文件,然后生成了投影文件的topojson

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

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

我已经创建了一个要点/块供您使用代码和我的更新文件查看。你可以在

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

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

  • 艾伯塔省的选举已经对该文件进行了预测,但它可能会在该过程中的任何时候进行预测。您可以在任何时候在投影之间进行转换,事实上,当您在javascript中应用投影时,您就可以进行转换。投影只是将一个系统的坐标转换成另一个系统的坐标。在你的例子中,我们从NAD83/阿尔伯塔横向墨卡托到WGS 84,再回到墨卡托投影。有关NAD83/Alberta TM的更多信息,请查看

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

    d3
    可以通过按照传递
    null
    投影来加载已投影的
    topojson
    数据,但在这种情况下,它希望
    topojson
    文件中的坐标是像素,如果查看
    topojson
    文件,它们太大,不能被视为像素值,所以他们不会那样工作

  • 我只是做了一个

    ogr2ogr -t_srs crs:84 alberta_wgs84 EDs_Act2010_FINAL.shp
    
    然后我使用
    topojson
    转换了它,并根据我的QGIS重新投影文件正确加载了它。所以我不确定你的转换出了什么问题。如何进行再投影并不重要,重要的是它确实如此。你肯定是在正确的轨道上


  • 你的地理数据有问题。看起来已经计划好了?我将其加载到QGIS中,虽然数据看起来不错,但似乎已经应用了投影。我在那里找到了一些艾伯塔省选区数据,当我从那里加载shapefile时,两者没有重叠。不确定发生了什么,但在显示之前所做的任何处理都会导致一些问题。此外,请尝试使用
    fill:none
    stroke:black
    设置路径样式,使其看起来更整洁。@Ben:由于您的评论是一个建设性的答案,让我们将其作为一个我们都可以+1和/或建设性地修改的答案发布。我也加入到你们的陈述中,这种破碎的svg路径模式(已经在stackoverflow的topojson频道上讨论过)的出现是由于数据中的破碎路径或者由于相互冲突的投影。嗯,奇怪的是,Alberta站点就是我从中获得原始形状文件的同一来源。我将更深入地研究我用于从SHP>Geo>Topo转换的方法。你知道详细解释的来源吗