【问题标题】:Fail to parse/project coordinates onto JSON无法将坐标解析/投影到 JSON
【发布时间】:2017-01-12 09:50:53
【问题描述】:

我只是想在 json 地图上绘制一堆圆圈,根据我通过 csv 解析的纬度和经度坐标使用动态cxcy 属性。

不管怎样,我已经很久没有遇到这个问题了,几乎是因为我对 d3 完全陌生。我通读了所有相关的帖子,回顾了初学者的教程(没有羞耻),我仍然无法理解我做错了什么。请看,很短,关键线是67-68。你可以在这里找到我的 json 地图:

http://bl.ocks.org/diggetybo/a2ace75c8ea89ab0da996154d3df7f5c

您会注意到,没有附加任何圆圈。据我所知,我开始以正统的 D3.js 方式附加圆圈:

  1. 创建一个空选择。
  2. 将数据绑定到doms
  3. 从数据中附加视觉效果

如果我做了什么愚蠢的事,一定要把它钻入我的内心——我的心理很强大,我可以接受。

【问题讨论】:

    标签: javascript d3.js geojson


    【解决方案1】:

    您的数据包含一些不在 AlbersUSA 投影的明确定义区域内的坐标。有关详细信息,请参阅我的 answer"D3 albersUsa projection funtion return null"。因为投影将针对这些返回 null,所以您会收到一个错误,这会破坏圆圈的创建。

    一种天真的方法是过滤掉无效的坐标:

    var data = rawData.map(function(d)
    {
        return {
            Latitude: +d.latitude,
            Longitude: +d.longitude,
            Place: d.place
        };
    })
    .filter(d => projection([d.Longitude, d.Latitude]));   // filter out null values
    

    这将在地图上显示display the circles。但是,您可能需要先检查您的数据并尝试提前筛选出来。

    【讨论】:

    • 哇,做到了。好主意,我从没想过从数据方面检查它。
    • 对了,如果坐标在海洋中,靠近陆地,也会为空?例如夏威夷周围的水?
    • 这取决于坐标。你有具体的例子吗?
    • @ArashHowaida 不过,不管它是在海洋中还是在陆地上。看看这个Block,它描绘了阿拉斯加和夏威夷的狭窄边界。
    • 再次感谢,您的帮助非常宝贵。我还有一个后续问题。在我将.filter() 链接到代码开头的数据映射部分之后,我还想添加另一个过滤器以仅在南加州附加圆圈。所以在附加圆圈部分,在.data(data) 之后我添加了这个:.filter( function(d) { return (Math.abs(d.Latitude-34)<2) && (Math.abs(d.Longitude-116)<2);}) 出于某种原因,它似乎过滤掉了所有内容,我得到错误 .data().enter() is not a function。
    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2017-05-27
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多