【问题标题】:Data positions in d3 projection transitionsd3 投影转换中的数据位置
【发布时间】:2017-08-17 07:21:59
【问题描述】:

如何将数据位置包含在 d3 投影转换中?

我根据https://bl.ocks.org/mbostock/3711652做了一个JsFiddle demo

显然数据点不遵循投影转换。这是我添加的相关 javascript:

//==========================================
var button = d3.select("#button")
    .on("click", function(){
       drawDot();
     });

function drawDot(){
    var coordinates = projection([d3.select("#lon").property("value"),
                                  d3.select("#lat").property("value")]);
    d3.select('svg')
        .append('svg:circle')
        .attr('cx', coordinates[0])
        .attr('cy', coordinates[1])
        .attr('r', 5);
}
//==========================================

【问题讨论】:

    标签: javascript d3.js projection


    【解决方案1】:

    所以首先你的 JS Fiddle 不起作用。

    查看 bl.ocks 演示它所做的是在更新时选择路径对象并对其进行转换。

    这是一个工作示例: https://jsfiddle.net/87h9ysLv/6/

    function drawDot(){
    var coordinates = projection([d3.select("#lon").property("value"),
                                  d3.select("#lat").property("value")]);
    d3.select('svg')
        .append('path')
        .datum(d3.geo.circle().origin(coordinates).angle(2))
        .attr('d', d3.geo.path().projection(options[d3.select("#projection-menu")[0][0].selectedIndex].projection));}
    

    所以圆需要是一个设置了“d”属性的路径元素。为此,我们需要将基准设置为我们想要的圆形对象,在这种情况下,它使用“geo”类型来工作(地理的缩写)。

    所以我们将 geo.circle 的原点设置为中心的经度/纬度,“角度”是我们的半径。

    然后我们使用 d3.geo.path() 将属性“d”设置为路径,然后我们通过在选择中选择当前选定的选项并检索相关投影来将其“投影”到形状上。

    【讨论】:

    • 谢谢。我在更新的 JS fiddle jsfiddle.net/87h9ysLv/1 中尝试了您的第一个建议,但问题仍然没有移动
    • 啊它现在有点清晰了,所以它必须是一个圆圈上的路径元素,因为它转换了“d”属性,我不能让它仍然工作但我会继续尝试跨度>
    • 最终小图应该以点为中心,而不是圆,不知道有没有区别。
    • 我无法为您提供图片,但我已更正了我的答案,现在应该可以使用了
    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    相关资源
    最近更新 更多