看不见的向量?组合 d3.tile()、d3.zoom() 和 TopoJSON 向量

2023-12-04

我已经使用栅格制作了有效的 D3 地图(d3.tile和地图库)和矢量(SVG 形状中的 TopoJSON)。但当我将它们组合起来时,我遇到了一个错误。

我遵循了 Mike Bostock 的光栅和矢量示例,尤其是他的“光栅与矢量 III”,它会更改变换和描边宽度以更新矢量的显示方式。

My map almost工作完美。然而,加载后,仅显示光栅图块;向量是不可见的:

enter image description here

但一旦我触发d3.zoom事件(通过平移或缩放),显示矢量:

enter image description here

我不明白这一点,因为我明确告诉浏览器,独立于缩放事件来绘制向量。这是相关的片段:

  // read in the topojson
  d3.json("ausElectorates.json", function(error, mapData) {
    if (error) throw error;

    var electorates = topojson.feature(mapData, mapData.objects.tracts);

    // apply a zoom transform equivalent to projection{scale,translate,center}
    map.call(zoom)
      .call(zoom.transform, d3.zoomIdentity
        .translate(mapWidth / 2, mapHeight / 2)
        .scale(1 << 12)
        .translate(-centre[0], -centre[1]));

    // draw the electorate vectors
    vector.selectAll("path")
      .data(electorates.features)
      .enter().append("path")
        .attr("class", "electorate")
        .attr("d", path);
  });

由于某种原因,最后一行d3.json()功能 -.attr("d", path")-- 没有可视化向量。

点击这里查看地图。点击这里访问完整代码及其使用的 TopoJSON。

我很想得到关于这个问题的建议,这让我感到困惑!

(PS 对于省略地图图块、D3.js 库等的版权归属表示歉意 - 我只是试图最小化此示例的代码。)


它正在绘制矢量 - 但是,您不能仅仅依赖于使用 d3 geoProjection 缩放和平移矢量,因为当您缩放时,您将平移和缩放应用于路径本身 - 而不是投影:

  vector.selectAll("path")
    .attr("transform", "translate(" + [change.x, change.y] + ")scale(" + change.k + ")")
    .style("stroke-width", 1 / change.k);

由于您没有设置比例和平移,因此在加载矢量时它们不会正确绘制。它们画得很小 - 因为你的投影比例是1/tau,翻译为[0,0]。检查页面加载时的 svg 表明它们在那里,而且很小。

解决方案是在之前绘制向量map.call("zoom")- 这样,您可以在手动缩放之前在路径上应用基本变换(中心、变换和缩放):

// read in the topojson
d3.json("ausElectorates.json", function(error, mapData) {
if (error) throw error;

var electorates = topojson.feature(mapData, mapData.objects.tracts);

// draw the electorate vectors
vector.selectAll("path")
  .data(electorates.features)
  .enter().append("path")
    .attr("class", "electorate")
    .attr("d", path);

// apply a zoom transform equivalent to projection{scale,translate,center}
map.call(zoom)
  .call(zoom.transform, d3.zoomIdentity
    .translate(mapWidth / 2, mapHeight / 2)
    .scale(1 << 12)
    .translate(-centre[0], -centre[1]));
   });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

看不见的向量?组合 d3.tile()、d3.zoom() 和 TopoJSON 向量 的相关文章

随机推荐

  • Swift NSMutableArray 添加一个数组

    问题是我第一次获取数据WebServices所以我已经显示了这些数据TableView然后用户向下滚动表视图 然后再次调用WebSevices并将此数据再次添加到数组中 但是当我尝试在 nsmutable 类型数组应用程序中再次添加数据时c
  • MySQL 日期差异

    我正在使用 MySQL 和 PHP 我想找出两个日期之间的差异 我有一个名为advertisers 其中有一个字段web start date 我想选择所有条目web start date距离当前日期不到 30 天 只需使用datediff
  • Oracle时间戳到sql server DateTime

    我有多个来自oracle数据库的语句 我需要在SQL Server中使用它们 insert into COMENZI NR COMANDA DATA MODALITATE ID CLIENT STARE COMANDA ID ANGAJAT
  • 将 YouTube 应用中的视频分享到我的 ios 应用

    当我在 iOS 上的 YouTube 应用程序中单击视频上的共享按钮时 是否可以让我的应用程序出现 我知道如何通过将我的文档类型添加到 Info plist 文件来将我的应用程序添加到打开选项中 但是当在 ios 上的 youtube 应用
  • ORA-19011: 字符串缓冲区太小

    我写了一个存储过程SP DEMAND QRY 如果数据中只有少数匹配行 5 或 6 这会产生正确的值Demand桌子 但是 如果该表包含更多匹配行 gt 6 那么在执行它时我会收到此错误 Error ORA 19011 Character
  • AR参考图像 - 图像的直方图较窄

    I am adding an image into ARKit project But it gives error 您有一张图像 其内容不利于检测 有一段在 WWDC18 演讲 ARKit 2 的新增功能中讨论了这一点 并提供了一些优点和
  • 自动绑定模型中的 Polymer Dart $[] 选择器

    Since 聚合物体已被删除 我们需要使用自动结合模板来使用聚合物结合功能之外聚合物元件
  • Discord.py 如何添加静音命令

    我正在制作一个不和谐的机器人 我真的想制作一个静音命令来使有毒用户静音 这是我目前的代码done 这不是重写版本 bot command pass context True async def mute ctx user id userNa
  • Android onSearchRequested() 回调调用活动

    我有一个 MapActivity 当按下搜索按钮时 它将显示 Android 搜索框 SearchManager 管理该对话框 并将用户的查询传递给可搜索活动 该活动搜索 SQLite DB 并使用自定义适配器显示结果 这工作正常 我从显示
  • Ajax Accordion 失去当前窗格

    我正在使用带有多个窗格的 Ajax Accordion 在回发时 当前打开的窗格始终重置回第一个窗格 有什么办法可以解决这个问题吗 Thanks Rob 我通过在查询字符串中传递当前窗格索引 然后将当前窗格设置回目标页面的 Page Loa
  • 实体框架 v6 GroupBy 丢失原始排序

    我有一个查询的以下部分 这是一个更大的查询的结尾 queryBuilder 是一个 IQueryable var results queryBuilder OrderBy x gt x Vehicle RangeId ThenBy x gt
  • arraylist 的副本不断被修改为原始值

    我正在开发一个用于保存和调用屏幕状态的系统 这是我第一次搞乱这种东西 所以我不太确定最好的方法是什么 但我目前存储了所有的 PreviewMonitor 数组列表内的对象 大约 40 个左右 问题是 当我创建一个名为 allPreviewM
  • String.Replace() 与 StringBuilder.Replace()

    我有一个字符串 需要用字典中的值替换标记 它必须尽可能高效 使用 string replace 进行循环只会消耗内存 记住 字符串是不可变的 StringBuilder Replace 是为了处理字符串操作而设计的吗 我希望避免 RegEx
  • 在 iPhone 上打开热点导致我的应用程序的屏幕向下移动

    当我在 iPhone 中打开人员热点时 我的应用程序的屏幕会向下移动 我正在其中加载子视图 但在其他屏幕上它不会发生 它仅发生在我正在加载子视图的屏幕上 那么有人能告诉我可能是什么问题吗 任何帮助将不胜感激 每当出现热点或其他通知时 sta
  • 如何使用 Java 查找 HTML 中的 URL

    我有以下问题 我不会说问题 而是情况 我有一些带有标签和所有内容的 HTML 我想在 HTML 中搜索每个 URL 我现在通过检查 h t t p 的位置来做到这一点 但我认为这不是一个很好的解决方案 有什么好主意吗 补充 我正在寻找某种伪
  • List 的 Xamarin 列表视图

    我正在制作一个移动应用程序 并尝试在列表视图中加载列表 该列表有多个元素和一个列表 public static List
  • 当应用程序在 macOS 上关闭时,在 @EnvironmentObject 上迭代数组

    我有一个 EnvironmentObject它为我的主视图提供了一个数组 其声明如下 my app swift main struct My AppApp App var body some Scene WindowGroup Conten
  • 故事板身份检查器中未显示自定义类

    我在我的应用程序中创建了一个名为的新类EmpresasTableViewController 并在故事板中我复制了CategoriasViewController到 EmpresasTableViewController 我只想分配该类Em
  • ADFS 的 SSO 的 SAML 错误 - MSIS0038:SAML 消息签名错误

    您好 我正在尝试使用 SSO 直接对我的网站的客户用户进行身份验证 我客户的 IDP 是 Microsoft ADFS 我正在使用 Passport SAML https github com bergie passport saml 配置
  • 看不见的向量?组合 d3.tile()、d3.zoom() 和 TopoJSON 向量

    我已经使用栅格制作了有效的 D3 地图 d3 tile和地图库 和矢量 SVG 形状中的 TopoJSON 但当我将它们组合起来时 我遇到了一个错误 我遵循了 Mike Bostock 的光栅和矢量示例 尤其是他的 光栅与矢量 III 它会