如何在大型光栅图像上将 Leaflet FlyTo() 与 unproject() 和 GeoJSON 数据结合使用?

2024-04-24

我正在使用 Leaflet 构建故事地图,使用切片为图块的大图像而不是“真实世界”地图数据。我正在使用这个插件:https://commenthol.github.io/leaflet-rastercoords/ https://commenthol.github.io/leaflet-rastercoords/和这个回购协议:https://github.com/jackdougherty/leaflet-storymap https://github.com/jackdougherty/leaflet-storymap

加载我的 GeoJSON 数据并取消投影坐标,将它们正确地绘制在我的图像地图上:

$.getJSON('map.geojson', function(data) {
  var geojson = L.geoJson(data, {
  // correctly map the geojson coordinates on the image
    coordsToLatLng: function (coords) {
      return rc.unproject(coords)
  },

但是当我到达 onEachFeature 时,我用 map.flyTo() 碰壁了,它从我的 JSON 文件中调用 Geometry.coordinates,但没有取消投影它们,因此 FlyTo() 将它们解释为远离地图的地理空间坐标:

map.flyTo([feature.geometry.coordinates[1], feature.geometry.coordinates[0] ], feature.properties['zoom']);

我尝试将未投影的坐标传递给变量,然后传递给 map.flyTo() 以及嵌套函数的变体,例如 map.flyTo.unproject(...,但没有运气。

如何将光栅坐标传递给flyTo()?

我不仅是 Leaflet 的新手,也是 JavaScript 的新手。我已经破解了到目前为止,但我被难住了。我确信解决方案是显而易见的。任何帮助是极大的赞赏。


在你的情况下,你可能只需要使用rc.unproject将您的坐标转换为可以传递给的 LatLngflyTo:

map.flyTo(
  rc.unproject(feature.geometry.coordinates),
  feature.properties['zoom']
);

话虽这么说,我必须承认我并不完全明白使用 leaflet-rastercoords 插件的意义,因为您可以通过遵循 Leaflet 教程轻松地执行相同的操作“非地理地图” http://leafletjs.com/examples/crs-simple/crs-simple.html.

var yx = L.latLng;

var xy = function(x, y) {
  if (L.Util.isArray(x)) { // When doing xy([x, y]);
    return yx(x[1], x[0]);
  }
  return yx(y, x); // When doing xy(x, y);
};

有了这个,每当你想将你的“光栅”坐标转换为Leaflet可用的东西时,你只需使用xy(x, y) with x是你的横向价值,并且y你的垂直的。

额外的好处是许多其他东西将变得容易兼容。

由于您使用图块而不是单个图像(用ImageOverlay在教程中为了适应坐标),您应该修改 CRS 转换,以便在缩放 0 时,您的图块0/0/0适合您的整个坐标。也可以看看图像上的传单自定义坐标 https://stackoverflow.com/questions/34638887/leaflet-custom-coordinates-on-image

IE。以传单栅格坐标为例:

  • 原始光栅图像尺寸:3831 px 宽 x 3101 px 高
  • 瓷砖尺寸:256 x 256 像素
  • 垂直“光栅”坐标在下降时增加(而在 Leaflet 教程中,它们在上升时增加,就像纬度一样)。
  • Tile 0/0/0实际上涵盖了more比原始图像大,就好像后者是 4096 x 4096 px(其余部分填充白色)

新CRS的确定:

  • 图块 0/0/0 应覆盖从左上角 [0, 0] 到右下角 [4096, 4096] 的坐标(即 256 * 2^4 = 256 * 16 = 4096)=>转型 http://leafletjs.com/reference-1.0.3.html#transformation系数a and c应该1/16
  • 不需要偏移 => 偏移b and d are 0
  • 没有恢复y纵坐标=>c是积极的

因此,要使用的新 CRS 为:

L.CRS.MySimple = L.extend({}, L.CRS.Simple, {
  //                      coefficients: a      b    c     d
  transformation: new L.Transformation(1 / 16, 0, 1 / 16, 0)
});

现在你的flyTo非常相似,但许多其他东西也兼容:

map.flyTo(
  xy(feature.geometry.coordinates),
  feature.properties['zoom']
);

演示改编自 leaflet-rastercoords 示例,并使用额外的插件来演示兼容性:https://plnkr.co/edit/Gvei5I0S9yEo6fCYXPuy?p=preview https://plnkr.co/edit/Gvei5I0S9yEo6fCYXPuy?p=preview

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

如何在大型光栅图像上将 Leaflet FlyTo() 与 unproject() 和 GeoJSON 数据结合使用? 的相关文章

随机推荐

  • geany 自定义文件类型 .svrf 用于语法突出显示

    我有一个类似的问题 我复制并编辑了filetype extensions conf in my config geany adding CALIBRE rul svrf SVRF cal 然后下 config geany filedefs我
  • 如何调试意外静默终止的 win32 进程?

    我有一个用 C 编写的 Windows 应用程序 有时会消失 我使用 蒸发 这个词是因为没有留下任何东西 没有来自 Windows 的 我们很抱歉 消息 没有来自 Dr Watson 设施的故障转储 有一次崩溃发生在调试器下 调试器没有中断
  • React Native STUCK 启动打包器

    由于某种原因 当我想启动我的 React Native 项目时 它卡在 正在启动 Packager 部分 我尝试删除节点包 然后重新安装它们 通过yarn npm安装它们 但没有成功 我不知道该如何解决这个问题 太尴尬了 我遇到过同样的问题
  • 正确结束 Java 命令行应用程序

    我只是想知道 我需要打电话吗System exit 0 就在之前mainJava 命令行应用程序的方法结束了吗 如果是这样 为什么 如果我总是放在那里 与让它自行退出有什么区别0 什么没清理干净 提前致谢 不 您并不总是需要打电话Syste
  • 如何在张量流中将TextVectorization保存到磁盘?

    我已经训练了一个 TextVectorization 层 见下文 我想将其保存到磁盘 以便下次可以重新加载它 我努力了pickle and joblib dump 这是行不通的 from tensorflow keras layers ex
  • 如何在文本文件中逐行读取和替换字符串?

    我有一个文本文件 内容如下 INSERT INTO shops VALUES 3 1000000 0 INSERT INTO shops VALUES 3 1000010 0 INSERT INTO shops VALUES 3 10000
  • 对内核模块代码进行单元测试是否可行?

    如果是这样我应该使用什么技术 我正在考虑使用 hippomock 因为它们可以用来模拟 C 方法 还有更好的方法吗 如果是这样 任何人都可以提供建议 或者您认为内核的单元测试是否太过分了 从 Linux 内核版本 5 5 开始KUnit可用
  • 如何绕过mysql中无效的utf8字符串

    我有一个包含阿拉伯文本数据的大文本文件 当我尝试将其加载到 MySQL 表中时 出现错误消息Error code 1300 invalid utf8 character string 这是我到目前为止所尝试过的 LOAD DATA INFI
  • 无法通过 Socket.IO 从 cookie 获取 Express 会话 ID

    我在 Node 中有一个典型的 Web 应用程序 它利用 Express 框架和会话中间件 我还将 Socket io 用于应用程序的某些动态部分 目前 这是一种聊天机制 但这是无关的 我已经能够成功地自行设置会话和socket io 但希
  • 将 Flex ByteArray 转换为 Java byte[]

    我正在尝试将使用 rtmp 协议从 Flex GUI 发送的文件上传到服务器上 我昨天问如何在服务器上发送文件数据 通过rtmps java上传文件到服务器 https stackoverflow com questions 2310855
  • Swift 中的拖放 - 注册拖动类型时出现问题?

    背景 我正在尝试在 Swift 中进行一些简单的拖放操作 类似于 Apple 的示例代码可可拖放 https developer apple com library mac samplecode CocoaDragAndDrop Intro
  • Drupal 8自定义块(模块)创建twig模板文件

    我有一个自定义模块 它创建一个具有字段元素的自定义块 这一切都很好 但我需要为这个块设置主题 我检查了这里的其他帖子并尝试过但没有成功 我已经启用了 twig 调试并获得了主题建议 还是没有运气 谁能指出我正确的方向 这是我到目前为止所拥有
  • 使用 apply 函数重写循环

    我有以下 3 个函数 我想使其更快 我认为应用函数是最好的方法 但我从未使用过应用函数 所以我不知道该怎么做 任何类型的提示 想法和代码片段将不胜感激 n T dt 是全局参数 par 是参数向量 函数 1 是创建 m 1 n 矩阵的函数
  • 如何将 Heroku PG 转储导入本地计算机

    我正在尝试将生产 Heroku 数据库导入到我的开发机器中 我的本地数据库是 PostgreSQL 首先 我将转储从 Heroku 导出到我的机器 curl o latest dump heroku pgbackups url 然后 我尝试
  • Java 中的事件顺序

    我有两个独立组件的两个事件 但有一个问题 JTabbedPane 的 stateChanged 事件在 JFormattedField 的 focusLost 事件之前触发 有没有办法使 stateChange 事件在 focusLost
  • Qt 中浮点数的强制点而不是逗号

    我有一个非常基本的问题 如何在 Qt 中强制使用浮点数中的点而不是逗号 我的操作系统有法语版本 其他问题 是否可以显示带有千位分隔符空格的数字 尝试这个 QLocale loc QLocale system current locale l
  • WP8:使用ApplicationBar截屏

    如何使用 ApplicationBar 截屏 我使用的例子来自这个分行 https stackoverflow com questions 5553429 wp7 take screenshot from application 但通过这种
  • 方法与类型 - 第 2 部分中的另一种方法具有相同的擦除

    我完全明白这个问题方法与类型中的另一个方法具有相同的擦除 https stackoverflow com questions 1998544 method has the same erasure as another method in
  • 如何在 MySQL 中声明变量以进行普通查询?

    如何为 MySQL 中的普通查询声明变量 e g declare myVar date set myVar something select from someTable where someColumn myVar 我尝试过 语法似乎是错
  • 如何在大型光栅图像上将 Leaflet FlyTo() 与 unproject() 和 GeoJSON 数据结合使用?

    我正在使用 Leaflet 构建故事地图 使用切片为图块的大图像而不是 真实世界 地图数据 我正在使用这个插件 https commenthol github io leaflet rastercoords https commenthol