【问题标题】:Display text and direct via hyperlink on d3 Map在 d3 Map 上显示文本并通过超链接直接
【发布时间】:2018-05-09 17:28:49
【问题描述】:

我有一个基于 topojson 文件的交互式 d3 地图正在运行 (http://atlas.niu.edu/afd/)。 topojson的结构如下:

我想在鼠标悬停时显示 CWA 和城市,并重定向到每个要素几何的特定 URL。如果需要,我可以在每个 URL 中硬编码或将它们存储在单独的 csv 文件中。任何例子都会非常有帮助!

【问题讨论】:

    标签: javascript json d3.js geojson


    【解决方案1】:

    网址重定向:

    就像你听.on('mouseover'一样,你可以听.on("click"在用户点击一个状态时执行一个动作:

    .on("click", function(d) {
      window.open("https://en.wikipedia.org/wiki/" + d.properties.State, "_blank");
    })
    

    鼠标悬停工具提示显示 CWA 和城市:

    您可以将svg:title 添加到您的状态节点,当状态悬停时将显示给定的文本(在鼠标悬停/单击定义之后):

    .append("svg:title")
    .text( function(d) { return d.properties.CWA + " - " + d.properties.City; });
    

    这是demo

    【讨论】:

    • 你们都很棒。差不多好了。我的问题是超链接不是存储在 topojson 中的东西。例如,KLOT (Chicago) 会直接指向这里:kamala.cod.edu/il/latest.fxus63.KLOT.html,而 Cleveland 会指向这里:kamala.cod.edu/oh/latest.fxus61.KCLE.html 最好将链接作为字段记录存储在 topojson 中(我可能会完成)或将它们存储在单独的.csv(如果是的话会是什么样子?
    • 实际上,我找到了一个不同/更好的来源。 forecast.weather.gov/… 因此,我需要做的就是弄清楚如何用 issueby = _____ 替换每个 CWA 变量。我看看能不能搞定!
    【解决方案2】:

    @Xavier 的回答是获得所需内容的一种好方法。虽然,这里有另一种方法可以做到这一点。

    显然我找到了一些时间来使用您网站中的数据并将其用于 plunkr

    这是一个相同的 plunkr:http://plnkr.co/edit/rlC38fQRU4oF3QslYUbz?p=preview

    对于工具提示,我只是添加了一个简单的div 工具提示来获取CWCity 属性。

    // Define the div for the tooltip
    var div = d3.select("body").append("div")   
     .attr("class", "tooltip")              
     .style("opacity", 0);
    

    鼠标悬停时:

    .on('mouseover',function(d) {
       d3.select(this).classed("selected",true);
       div.html('CWA: ' + d.properties.CWA + "<br/>"  + 'City: ' + d.properties.City)   
        .style("left", (d3.event.pageX) + "px")     
        .style("top", (d3.event.pageY - 28) + "px").style("opacity", .9);
    

    对于链接 (url),我将 paths 包装在 anchor 标记中,并在属性中找到 target=_blank" (open in a new window) which defaults to [d3JS](https://d3js.org) if nourl`。

    相关代码:

    svg.selectAll(".nwscwa")
    .data(cwas)
    .enter().append('a')
    .attr('xlink:href', function(d) {
      return d.properties.link || "https://d3js.org";
    }).attr('target', '_blank')
    

    希望这种方法对您有所帮助,如果 plunkr 不适合您,请告诉我。

    【讨论】:

    • 好吧,我的地图在本地运行,但无法在堆栈溢出专用代码 sn-p 中运行。我很好奇你曾经用哪个设置让它与 plunker 一起运行。
    • 我尝试获取数据(几行)并将其发布到 plunkr 中的新文件中,但随后仅传递 URL(而不是 https).defer(d3.json,"http://atlas.niu.edu/afd/beddd.json") 就可以了。所以就用了。
    • 你们都很棒。差不多好了。我的问题是超链接不是存储在 topojson 中的东西。例如,KLOT (Chicago) 会直接指向这里:kamala.cod.edu/il/latest.fxus63.KLOT.html,而 Cleveland 会指向这里:kamala.cod.edu/oh/latest.fxus61.KCLE.html 最好将链接作为字段记录存储在 topojson 中(我可能会完成)或将它们存储在单独的.csv(如果是的话会是什么样子?
    • 实际上,我找到了一个不同/更好的来源。 forecast.weather.gov/… 因此,我需要做的就是弄清楚如何用 issueby = _____ 替换每个 CWA 变量。我看看能不能搞定!
    • 很高兴我们能提供帮助。替换这些值应该很容易。如果没有,请告诉我,我会帮你的。
    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多