在 d3 中缩放投影是什么意思?

2023-11-25

我知道在 D3 中,尺度是从输入数据值(域)到输出数据值(范围)的数学映射。我知道我可以设置一个比例,将域的输入映射到一个范围,如下所示:

var scale = d3.scale.linear().domain([100, 500])
.range([10, 350]);
scale(100); //Returns 10

我知道一旦设置了比例,您就可以使用它来缩放属性,如下所示:

.attr("cx", function(d) {
return scale(d[0]); //Returns scaled value
})

然而,在博斯托克映射教程比例尺的使用略有不同。 Bostock 根据墨卡托投影返回的任何内容调用比例:

var projection = d3.geo.mercator()
    .scale(500)
    .translate([width / 2, height / 2]);

我试图理解那行代码,但遇到了一些麻烦。mercator()返回一些东西——从 API 上看不太清楚——然后是scale使用输入值 500 对该对象调用方法。

在这样的投影上称为“比例”是什么意思?这与将 100 转换为 10 的方式 scale() 有何关系——如上面的示例所示。

更直接的是,如果我将其添加到我的代码中,我的 geojson 地图就会消失!如何使其正确缩放?

var projection = d3.geo.mercator()
    .scale(500)
    .translate([width / 2, height / 2]);

var path = d3.geo.path()
    .projection(projection); //if I add this little bit to the path, my map disappears!

这是我正在使用的 GeoJSON:


在这种情况下,比例是指一般意义上的物体的大小。它与 d3 尺度函数没有直接关系,但与尺度变换您可以应用到 SVG 元素以使其变大或变小。但是,它不是缩放平面绘图,而是缩放复杂的投影。

返回的投影d3.geo.mercator()是一个函数。具体来说,它是一个将经度/纬度点转换为 x/y 点的函数。

类似地,返回的函数d3.geo.path()将 GeoJSON 数据转换为 SVG 路径定义。当您通过为其分配特定的投影函数来分配修改此函数时,它将使用该投影来找出它创建的路径上每个点的位置。

现在,当您为路径分配放大的投影时,为什么您根本看不到任何东西?可能只是因为你放大得太大了,所以什么也看不到:你迷失在空旷的海洋中。投影的默认比例因子为 150,因此 500 的比例放大了三倍以上。尝试不同的比例因子(有些比 150 更大,有些比 150 小)来放大和缩小地图。

当然,翻译也可能会影响你的地图。这平移参数设置地图中心(纬度/经度)点的 x/y 值。如果您没有指定要使用的内容中心点,投影使用 0 度纬度和 0 度经度。如果您尝试绘制的地理距离该点(位于几内亚湾,加纳海岸附近),那么除非您大幅缩小(即使用非常小的比例数字),否则什么也不会显示。

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

在 d3 中缩放投影是什么意思? 的相关文章

随机推荐

  • 使用复杂类型查询 Spark SQL DataFrame

    如何查询具有复杂类型 例如映射 数组 的 RDD 例如 当我编写这个测试代码时 case class Test name String map Map String String val map Map hello gt world hey
  • Zend Framework 2 - BjyAuthorize 始终拒绝访问

    我已经设置了bjyoungblood bjy authorize模块 但我目前正在得到一个403除在配置文件中配置的 URL 之外 每个 URL 都会出现 访问被拒绝 错误home route My module byjauthorize
  • 在烧瓶应用程序中保留全局状态[重复]

    这个问题在这里已经有答案了 我正在尝试将缓存字典保存在我的flask应用 据我了解 应用上下文 特别是烧瓶 g 对象应该用于此目的 Setup import flask as f app f Flask name 现在如果我这样做 with
  • 如何引用同一 appsettings.json 文件中的另一个值?

    我需要在 appsettings json 中的两个位置使用数据库连接字符串 是否可以在 json 文件中引入公共变量或 json path 相关引用以避免潜在的问题 如果能在不接触 C 代码的情况下拥有它 那就太棒了 Connection
  • 使用 sed 编辑 crontab

    我正在编写一个 sed 命令 该命令应取消注释 crontab 中的条目 有一个更好的方法吗 我想到的第一个选项是 sed Example crontab l 5 3 bash test sh sed 命令应取消注释该条目 这就是我现在所拥
  • 使用 JavaScript 更改 HTML 名称属性

    按下一个div 我把它做成了button与其他代码 我想要以下代码 div 1 br div 更改名称name w1 0 to name w1 1 我正在使用以下 JavaScript function weekclick id docum
  • 模数运算符运行第一项,然后每第三项运行

    所以我需要它在第一个循环上运行 然后在每个第三个循环上运行 if k 3 k 1 echo div class modcontainer 对我来说似乎很简单 但我不了解模数 模数返回余数 而不是布尔值 这段代码将解析为true for 1
  • 如何根据 R 中的列值范围拆分数据框?

    我有一个这样的数据集 Users Age 1 2 2 7 3 10 4 3 5 8 6 20 如何将此数据集拆分为 3 个数据集 其中第一个数据集包含年龄在 0 5 岁之间的所有用户 第二个数据集包含 6 10 岁 第三个数据集包含 11
  • 在 iOS4 中 UIWebView 播放视频损坏?

    我有一个从 SDK 2 0 版开始运行的应用程序 我在其中创建并添加 UIWebView 然后加载 mov 的 URL 来播放电影 从 4 0 beta 的早期版本到 4 0 GM 此功能已停止工作 当我现在加载电影时 出现以下错误 插件处
  • 使用 savemat 保存和加载 Python dict 会导致错误

    这是我收到的错误的一个最小示例 如果我正确理解了文档 这应该可以工作 但似乎我没有 a a test1 1 a test2 2 a test3 3 import scipy io as io io savemat temp a a b io
  • Android Instant Apps - 无法“运行未经验证的软件、运行任意本机代码”。仅即时应用程序运行时

    Android Instant Apps 文档中指出受限功能部分它不能 运行未经验证的软件 运行任意本机代码或动态加载除免安装应用运行时提供的代码之外的代码 我不完全理解上述声明 但在我看来 它可能不接受任何第三方软件或除中给出的库之外的任
  • Bash:Git 子模块 foreach?

    I have sup别名为submodule foreach git co master git up co up是别名checkout pull rebase 分别 如何添加条件 以便如果子模块名称是Libraries JSONKit 它
  • 设置 Scrapy 代理中间件在每个请求上轮换

    这个问题必然有两种形式 因为我不知道更好的解决途径 我正在爬行的网站经常将我踢到重定向的 用户被阻止 页面 但频率 按请求 时间 似乎是随机的 并且他们似乎有一个黑名单阻止了我正在使用的许多 开放 代理列表通过代理网格 所以 当 Scrap
  • Node.js - Express.js JWT 始终在浏览器响应中返回无效令牌错误

    我正在使用node js和express js快递 jwt模块 并且我设置了一个简单的 HTTP 服务器来测试所有内容 这是涉及的节点代码 app set port process env PORT 3000 app use express
  • Kubernetes - 没有选择器的服务

    我正在为没有选择器的 Kubernetes 服务而苦苦挣扎 该集群通过 kops 安装在 AWS 上 我有一个包含 3 个 nginx pod 的部署 暴露端口 80 apiVersion apps v1 kind Deployment m
  • 会话的跨子域 cookie 处理?

    是否可以设置一个有效的身份验证 cookie sub1 domain com sub2 domain com 或者每个子域总是需要它自己的 cookie 如果指定要附加到域的 cookie 则可以跨子域使用 cookie domain co
  • 拳击和加宽

    这两者有什么区别呢 我知道拳击正在将原始值转换为引用 什么是扩大 另外 首先应该进行拳击还是应该进行加宽的顺序应该是什么 扩大对拳击和 var args 的胜利 拳击战胜了 var args 引用变量的扩宽取决于继承 因此 Integer
  • 如何使用 Mercurial 子存​​储库来共享组件和依赖项?

    我们使用 C 开发 NET 企业软件 我们正在寻求改进我们的版本控制系统 我以前使用过mercurial 并且一直在我们公司尝试使用它 然而 由于我们开发企业产品 我们非常关注可重用的组件或模块 我一直在尝试使用 Mercurial 的子存
  • UIActivityIndi​​catorView 在 UICollectionViewCell 中不旋转

    我有一个自定义单元格加载在我的集合视图的底部 它唯一的工作是显示活动指示器视图 这在应用程序进行新的工作调用时发生 所以我将它添加到单元格中 如下所示 BBLoaderCell loaderCell collectionView deque
  • 在 d3 中缩放投影是什么意思?

    我知道在 D3 中 尺度是从输入数据值 域 到输出数据值 范围 的数学映射 我知道我可以设置一个比例 将域的输入映射到一个范围 如下所示 var scale d3 scale linear domain 100 500 range 10 3