d3.js:从文件中绘制地图上两点之间的弧

2023-12-04

我是 d3.js 的新手,正在尝试一些简单的事情。我绘制了一张读取 file1 和 file2 的世界地图。 file2 按索引 ID、纬度和经度列出机场。 file1 通过机场的索引 ID 来对机场进行配对。我想画一条弧线、一条线或任何东西来连接它们。我们的想法是制作这样的东西:http://mbostock.github.io/d3/talk/20111116/airports.html使用不同的数据集 但这个例子太难遵循了。

下面的代码正确地绘制了地图并绘制了机场的圆圈,但如何连接它们还有待观察。

<!DOCTYPE html>
<meta charset="utf-8">
<body>
<script type="text/javascript" src="d3/d3.v3.js"></script>
<script src="js/topojson.v0.min.js"></script>
<script>
    var width = 2000, height = 2000;
    var projection = d3.geo.mercator().center([0, 5]).scale(100).rotate([0, 0]);
    var svg = d3.select("body").append("svg").attr("width", width).attr("height", height);
    var path = d3.geo.path().projection(projection);
    var g = svg.append("g");

    d3.json("json/world-110m2.json", function(error, topology) {// load and display the World
        g.selectAll("path").data(topojson.object(topology, topology.objects.countries).geometries).enter().append("path").attr("d", path)
    });

    d3.csv("file1", function(flights) { //Attempt to draw arcs
        var linksByOrigin = {}, countByAirport = {}, locationByAirport = {}, positions = [];

        var arc = d3.geo.greatArc().source(function(d) {
            return locationByAirport[d.source];
        }).target(function(d) {
            return locationByAirport[d.target];
        });

        flights.forEach(function(flight) {
            var origin = flight.origin, destination = flight.destination, links = linksByOrigin[origin] || (linksByOrigin[origin] = []);
            links.push({
                source : origin,
                target : destination
            });
            countByAirport[origin] = (countByAirport[origin] || 0) + 1;
            countByAirport[destination] = (countByAirport[destination] || 0) + 1;
        });

        d3.csv("file2", function(error, data) {// read in and plot the circles
            g.selectAll(".blue.circle").data(data).enter().append("circle").attr("class", "blue circle").attr("cx", function(d) {
                return projection([d.lon, d.lat])[0];
            }).attr("cy", function(d) {
                return projection([d.lon, d.lat])[1];
            });

            g.selectAll("path.arc").data(function(d) {
                return linksByOrigin[data.ctuid] || [];
            }).enter().append("svg:path").attr("class", "arc").attr("d", function(d) {
                return path(arc(d));
            });
        });
    });
</script>
</body>
</html>

我对此很陌生,因此代码可能很草率,但任何有关从 CSV 中提取的连接点的提示将不胜感激。谢谢你!


要在点之间绘制圆弧,为什么不使用带有 arc 指令(A)的路径。我也尝试过greatArc,但没有成功。但找到了替代品这次讨论替代方案如下:

 path.attr("d", function(d) {
    var dx = d.target.x - d.source.x,
        dy = d.target.y - d.source.y,
        dr = Math.sqrt(dx * dx + dy * dy);
    return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr +
" 0 0,1 " + d.target.x + "," + d.target.y;
  });

Replace path(arc(d))使用上面的代码片段并根据您的值替换 x 和 y 值。这对我来说就像魅力一样。希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

d3.js:从文件中绘制地图上两点之间的弧 的相关文章

  • 在 d3.js 中换行长文本

    我想将长文本元素换行为宽度 这里的例子取自博斯托克的wrap功能 http bl ocks org mbostock 7555321 但似乎有两个问题 首先 wrap的结果没有继承元素的x值 文本左移 其次它绕在同一条线上 并且lineHe
  • 表格中与文本一起内嵌 D3 迷你图

    假设有一个这样的表 var data Orange Orange 6 3 3 2 5 Apple Red 6 2 6 5 5 Grape Purple 9 1 2 3 1 我希望将字符串表示为字符串 但将数字数组表示为 D3 折线图 如果这
  • 动画 D3 地球仪 (d3.geo.azimuthal)

    我对 d3 javascript 库有疑问 我想使用方位角 http mbostock github com d3 talk 20111018 azimuthal html地球 我想从地球上的经度和纬度坐标插入点 并使地球动画化 而无需使用
  • d3.js:在 SVG 线性渐变中过渡颜色?

    正如标题所说 使用D3 js 是否可以实现线性渐变的颜色过渡 例如 如果我有这个渐变 var gradient svg append svg defs append svg linearGradient attr id gradient a
  • D3.js 从 file:/// 加载本地数据文件

    我知道D3 js支持使用XHR和JSONP加载数据文件requests https github com mbostock d3 wiki Requests 但就我而言 我将通过从文件系统双击 html 文件来运行它们 这将像file fo
  • JS / d3.js:突出显示相邻链接的步骤

    再会 我之前对该项目的问题是 D3 js 根据相同的 json 值动态生成源和目标 https stackoverflow com questions 41138515 d3 js dynamically generate source a
  • svg / d3.js 矩形一侧的圆角

    我知道 svg 有一个内置函数可以做圆角 但我只需要在四个角中的 2 个上做圆角 我知道我可以在彼此之上绘制多个矩形来模仿这一点 但这看起来有点俗气 有什么方法可以使用剪辑或任何 d3 js 方法来做到这一点吗 现在我有一个水平条形图 其中
  • d3.js - 具有树形布局,如何更改 X 轴以使用 D3 中的时间刻度?

    我有这个树布局 需要它在 X 轴上使用时间刻度来将节点固定为日期 另外 我需要保留根节点 它有一个is rootJSON 数据中的属性 在时间范围之外 Here http codepen io anon pen kIJxo是具有树布局工作的
  • crossfilter - 计算具有属性的所有记录的百分比

    这是我的问题 我正在使用 python Flask 服务器从 mongo db 获取 json 数据 并在其中指定要导入的字段 此数据采用 json 格式 并且仅像这样获取 一旦通过 graphs js 中的 crossfilter 是否可
  • 如何部分或仅按百分比沿路径过渡

    我是 d3 的初学者 目前无法使用最新版本 但我使用的是 3 x 版本 我想要实现的应该很简单 但遗憾的是我没有找到有关如何做到这一点的资源 目标是在我的 svg 中显示一条路径 然后我想显示例如一个圆并沿着路径过渡 移动 追踪圆 如果我想
  • 具有可变填充的 D3 包布局

    我无法使用 d3 layout pack padding 获得变量填充 我想在组和叶节点处放置不同的填充 d3 layout pack sort null size this width this height children funct
  • 展平使用 d3.js 嵌套创建的对象层次结构

    我正在尝试以如下方式可视化团队协作数据 图表中的不同颜色代表不同的协作工件类型 来自来源的数据如下所示 var json teamLabel Team 1 created date 2013 01 09 typeLabel Email co
  • 使用 pandas“to_csv”防止尾随零

    我正在尝试将 CSV 字符串导出到 D3 Web 应用程序 但是命令to csv坚持在数据中添加尾随 0 这会妨碍 D3 的正确使用 这是一个说明问题的最小示例 我的 简化的 数据框是 gt gt gt df pd DataFrame Al
  • 将 D3 图表另存为图像

    我在应用程序中创建了很多 D3 图表 但现在我的要求是将 D3 图表保存为任何格式 如 png gif 或 pdf 我搜索了很多 每个人都说我们可以使用画布来实现这一点 任何人都可以给出任何示例或链接吗 从概念上讲我很清楚这一点 使用can
  • D3 版本 5,如何将 Promise 链接到图表构建

    我想将 JS Promise 链接到 D3 v5 图表构建 并想在动画之后解决它 但它不起作用 下面的代码还在注释中显示了不同类型的尝试 它们都不起作用 选项 3 导致异常 未捕获 承诺中 类型错误 无法读取未定义的属性 on 选项 2 和
  • d3-sankey 链接在拖动事件时未更新

    问题一 我无法更新拖动事件上的 d3 sankey 链接 我正在尝试复制与此类似的 d3 垂直和水平拖动事件 https bl ocks org d3noob 5028304 https bl ocks org d3noob 5028304
  • 尝试将 SVG 绘制到画布上,为什么我的 SVG XML 被截断?

    我真正想做的就是将我喜欢的动态创建的 SVG 放入 PDF 中 目前通过 jsPDF 添加 SVG 不起作用 因此我尝试将它们转换为 PNG 以便尝试添加图像 这是 IE11 中的情况 客户端要求 如果我做 var lsvg d3 sele
  • 使用时间序列数据和scaleBand指定D3条形图上的刻度

    我尝试为具有时间序列数据的 d3 v4 条形图指定多个刻度和多个刻度标签 如下图所示 基于本教程 https bl ocks org zigahertz 1ee4965ff76514517bb7ce6af21e5d44我有一个处理时间序列数
  • 同心放射圆 d3

    我有一个等距值的数组 我用它来绘制同心圆 我想使用一种散发效果 本质上是 一旦最外面的圆的值超过最大值 就将其删除 并在中心添加一个新的圆来补偿 我不确定如何操作数据集来删除和添加新圆圈
  • 事件监听器如何/何时附加到 d3.js 中?

    我正在尝试制作一个 SVG 编辑器 长话短说 我需要将鼠标事件附加到

随机推荐

  • 带标题的 PHP Mail() 函数

    当我将 header 与 PHP mail 函数一起使用时 我总是很困难 问题总是一样的 去年 这次 只要我记得 就让我抓狂 问题在于标题仅显示在电子邮件中 收到的邮件示例 Source onderwerp Bedankt voor uw
  • 防止 jQuery Mobile 上的水平滚动

    有没有办法最好仅使用 CSS 来防止移动设备上的水平页面滚动 这是一个例子 http jsfiddle net YfLst 15 Update 以下代码解决了 iOS 上的问题 但 Android 上的问题仍然存在 html body ov
  • 如何在 Eclipse 中以调试模式运行外部工具

    由于各种原因 我的项目只能作为已完成且打包的 JAR 运行 组装时会发生一些神奇的事情 因此我将其作为 Eclipse 中的外部工具运行 我缺少的是调试功能 有没有办法在 Eclipse 中以调试模式运行外部工具 如果远程 JVM 已在调试
  • 记录完成谷歌表单所需的时间

    我正在尝试记录完成并提交 Google 表单所需的总时间 我的逻辑很简单 以下代码将记录时间戳并将其作为多项选择选项 然后 在提交表单后 我们无论如何都会得到一个时间戳 但与此同时 我们也会得到最初记录的时间戳作为该问题的答案 这是我可爱的
  • JSONEncoder 的 dateEncodingStrategy 不起作用

    我正在尝试使用 Swift 4 的 Encodable JSONEncoder 将结构序列化为字符串 该对象可以保存异构值 例如 String Array Date Int 等 除了日期之外 所使用的方法工作正常 JSON编码器的dateE
  • 如何派生具有类型族的记录的实例

    这是我正在尝试但无法编译的内容 LANGUAGE TypeFamilies LANGUAGE StandaloneDeriving LANGUAGE FlexibleInstances import Data Text as T impor
  • URL缩短网站

    我正在开发一个使用 PHP MySQL 和 Apache 的 URL 缩短网站 当我查看开源项目时 URL 缩短的总体思路是 用户提供 URL 链接 系统从数据库获取该链接的 ID 然后转换 ID X 基数系统 我使用的是 36 基数 然后
  • 删除连续的重复单元格

    只是为了澄清 我不想删除重复的行 我想删除行中的重复单元格 这是一个经典的地址表 在某些行中有重复的条目 我需要删除这些条目 我在 VBA 中看到的大部分内容都是用于删除列中的重复值 但我找不到删除行中的重复值的方法 Name Addres
  • 是否有工具/解决方案可以对循环进行编程,其中仅每 X 次迭代检查一次条件?

    例如 我有一个由 while 循环组成的函数 这个函数会检查素数 function isprime int number int i 2 int max int sqrt number 1 while i
  • 将中立者放在一边的李克特图

    我正在使用 Likert 包来创建调查问卷图 我想创建一个像这样的情节 其中中性反应被搁置 你知道在 R 中是否有办法做到这一点 一个如何重现情节的简单例子 lst lt c I dislike them a lot I dislike t
  • 如何将 facebook api 中的日期转换为 android 应用程序日期格式

    我正在开发一个类似于 android facebook 应用程序的应用程序 我从 Facebook 应用程序获得了创建的时间字段 created time 2012 11 28T12 53 40 0000 那么 我怎样才能将其转换为 and
  • C 指针:数组变量

    我在我的书中读到了这一点 以及互联网上的许多来源 数组变量points到数组中的第一个元素 如果为真 则数组变量和第一个元素是不同的 Right 这意味着通过下面的代码 它将产生两种不同的结果 int main char msg stack
  • 有没有办法在 Javascript 中组合对象

    我正在用 Javascript 进行一些数据清理 我想知道是否有一种方法可以根据通用 ID 组合对象 鉴于以下情况 subject Hadji Singh predicate nameOfUser id 3f540200 58b9 40a5
  • R Kruskal-Wallis 与多个因素

    我正在寻求帮助 对我的数据集执行大量因素的 Kruskal Wallis 检验 我可以对单个因素进行测试 例如 AD 1yr kruskal test Shannon AD 1y data comm 但我想要测试 50 多个因素 并且希望有
  • C 中未定义长度的数组

    我正在看教科书中的一个练习 内容是 创建一个 C 程序 从键盘获取长度为 N 的数组 问题是 在C语言中 如何创建未定义长度的数组 谢谢你们 不要创建未定义长度的数组 After得到需要的长度N 如果 C99 使用 VLA 可变长度数组 i
  • 垂直对齐位于浮动同级旁边的 Div 中的多行文本

    我有两个兄弟姐妹 其中一个占据父级宽度的 70 并向左浮动 它有一个clip path创建不规则多边形 同级 div 的宽度为父级 div 的 100 我已经放了一个shape outside浮动 div 上的属性允许同级中的文本以遵循多边
  • SupportMapFragment 或 GoogleMap 为 null

    设法使代码没有错误 但是在启动时 我总是在 mMap mapFrag getMap 行处收到空指针异常 为什么会这样呢 我是否缺少一些导入或一些步骤 我不确定是否是 SupportMapFragment 或 GoogleMap 对象导致了问
  • Plone 中是否有一种简单的方法可以在新用户加入门户时收到电子邮件通知?

    我希望每当新用户加入门户时都会向门户电子邮件地址发送电子邮件通知 我的猜测是我应该编写一个新产品来做到这一点 这样的产品是否已经存在 针对 Plone 4 我检查了内容规则 但据我所知 只有当我让用户对膜 记住之类的东西感到满意时 它才能起
  • 使用 PHP xmlwriter 在 xml 文件中添加多个数据

    我需要为每个月添加文章xml使用 PHP 文件xmlwriter sql SELECT YEAR FROM UNIXTIME timestamp AS YEAR MONTH FROM UNIXTIME timestamp AS MONTH
  • d3.js:从文件中绘制地图上两点之间的弧

    我是 d3 js 的新手 正在尝试一些简单的事情 我绘制了一张读取 file1 和 file2 的世界地图 file2 按索引 ID 纬度和经度列出机场 file1 通过机场的索引 ID 来对机场进行配对 我想画一条弧线 一条线或任何东西来