使用 EPSG:25832 投影在 Leaflet 中垂直对齐 TMS 图块

2024-02-05

我使用 Leaflet 和 Proj4Leaflet 来处理 25832 中的图块。该应用程序相当简单:我尝试将 EPSG:25832 中的图块叠加到全比例底图上。我已从瓷砖地图元信息中复制了各个分辨率和来源。我面临的问题是地图未对齐,一旦我放大,图块就不会按正确的顺序放置。我很感激这里的任何形式的支持(顺便说一下,this https://www.bmvi.de/DE/Themen/Digitales/Breitbandausbau/Breitbandatlas-Karte/start.html是一个使用 openlayers 的工作示例)。

我想我在这里做错了什么:

// Set resolutions
var resolutions = [156367.7919628329,78183.89598141646,39091.94799070823,19545.973995354114,9772.986997677057,4886.4934988385285,2443.2467494192642,1221.6233747096321,610.8116873548161,305.40584367740803,152.70292183870401,76.35146091935201,38.175730459676004,19.087865229838002,9.543932614919001,4.7719663074595005,2.3859831537297502,1.1929915768648751];

// Define CRS
var rs25832 = new L.Proj.CRS(
    'EPSG:25832',
    proj4rs25832def, 
    {
        origin: [ 273211.2532533697, 6111822.37943825 ],
        resolutions: resolutions
    }
);

...使用来自的瓷砖信息https://mapproxy.bba.atenekom.eu/tms/1.0.0/privat_alle_50_mbit/germany https://mapproxy.bba.atenekom.eu/tms/1.0.0/privat_alle_50_mbit/germany .

然后我添加一个平铺层

var url = 'https://mapproxy.bba.atenekom.eu/tms/1.0.0/privat_alle_50_mbit/germany/{z}/{x}/{y}.png';  

var tileLayer = L.tileLayer(
    url, 
    {
        tms: true,
        crs: rs25832,
        continuousWorld: true,
        maxZoom: resolutions.length
    }
);

并将它们添加到地图中..

// Setup map
var map = L.map('map', {
    crs: rs25832,
    center: [ 50.8805, 7.3389 ],
    zoom:5,
    maxZoom: resolutions.length,
    layers: [ baseWms, tileLayer ]
});

最少的代码可以在这里找到:https://jsfiddle.net/6gcam7w5/8/ https://jsfiddle.net/6gcam7w5/8/


这归结为 Y 坐标如何TMS https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification瓷砖是倒置的(向北时它会变得更高,而不是默认的TileLayers,其中Y坐标向南变大)。

看看处理此特定功能的传单代码 https://github.com/Leaflet/Leaflet/blob/master/src/layer/tile/TileLayer.js#L177-L183将阐明这个问题:

    if (this._map && !this._map.options.crs.infinite) {
        var invertedY = this._globalTileRange.max.y - coords.y;
        if (this.options.tms) {
            data['y'] = invertedY;
        }
        data['-y'] = invertedY;
    }

这里有两件事对于计算图块的正确 Y 坐标至关重要:

  • CRS 必须是有限的(它必须有界限)
  • 必须有一个有限的全局图块范围(在 Leaflet 中是最终定义 https://github.com/Leaflet/Leaflet/blob/e8c28b996179373447dde1df479898576a508579/src/layer/tile/GridLayer.js#L609受 CRS 限制,而不是TileLayer bounds)

长话短说,您的 CRS 应该以已知的界限来定义。对于这种特殊情况,从TMS 能力文档 https://mapproxy.bba.atenekom.eu/tms/1.0.0/privat_alle_50_mbit/germany...

<BoundingBox minx="273211.2532533697" miny="5200000.0" maxx="961083.6232988155" maxy="6111822.37943825"/>

……然后变成了L.Bounds定义Leaflet CRS时的定义,例如...

// Define CRS
var rs25832 = new L.Proj.CRS(
    'EPSG:25832',
    proj4rs25832def, 
    {
        origin: [ 273211.2532533697, 6111822.37943825 ],
        resolutions: resolutions,
        bounds: [[273211.2532533697, 5200000],[961083.6232988155, 6111822.37943825]]
    }
);

东西应该可以正常工作(不需要将 CRS 传递给tilelayers,因为它们都会使用地图),如下所示工作示例 https://jsfiddle.net/qzLhax5r/.

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

使用 EPSG:25832 投影在 Leaflet 中垂直对齐 TMS 图块 的相关文章

  • ReferenceError:找不到变量:需要

    我在加载时遇到问题node modules到我的网页之一 我已经安装了 npm node js 并且我想使用require 函数在我的网站上初始化 Firebase 我不知道为什么 但它抛出引用错误 ReferenceError 找不到变量
  • 使用selenium IDE提取部分文本并将其放入变量中

    有人可以告诉我应该使用哪个命令来使用 Selenium Ide 从文本中仅提取数字 694575 并将其放入变量中以供进一步使用 这是带有文本的 div div class loginBoxTitle Edit Exhibition Cen
  • 如何理解 Angular JS 中的控制台错误消息?有什么工具吗?

    我是 Angular JS 的新手 我的第一个问题是如何理解 Angular JS 中控制台的错误消息 我编写了这段用于匹配密码的代码片段 它在控制台上抛出错误 但它工作正常 它是有线的 我无法从这些控制台消息中理解任何内容 谁能指出我为什
  • 如何向 jQuery Tokeninput 添加占位符?

    如何将占位符添加到 jQuery Tokeninput 字段 一个正常的placeholder属性在这里不起作用 对于这样的输入
  • 为什么 jQuery 点击事件会多次触发

    我这里有这个示例代码http jsfiddle net DBBUL 10 http jsfiddle net DBBUL 10 document ready function creategene click function confir
  • 计算Javascript中两次点击之间的时间

    我想用 javascript 计算属性的两次点击之间的时间 但我不知道如何 例如 a href click here a 如果用户单击多次 假设 5 秒内 我想显示警报 如果有帮助的话我正在使用 jQuery 我对 javascript 不
  • 将一个文本框的内容复制到另一个文本框

    假设在文本框中输入了一个条目 是否可以在第二个文本框中保留相同的输入文本 如果是这样 这是如何完成的
  • 禁用 JavaScript 中的右键单击

    当我尝试禁用右键单击时 它不起作用 我尝试使用下面的代码 document onclick function e console log e button if e button 2 e preventDefault return fals
  • Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?

    我主要了解 Ember JS 的基础知识 大多数示例实际上只处理单个控制器和模型以在页面上显示某些内容 我真的很想用 Ember 构建一个完整的 Web 应用程序 所以有人能告诉我如何组织和连接多个控制器 模型和视图到一个页面中吗 例如 如
  • 如何改变HTML5视频的播放速度?

    如何更改 HTML5 中的视频播放速度 我查过视频标签的属性 https www w3schools com html html5 video asp在 w3school 但无法做到这一点 根据这个网站 http www chipwreck
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • 选中复选框时提交表单

    有没有办法在选中复选框时提交表单
  • window.showModalDialog 的等效跨浏览器解决方案是什么?

    window showModalDialog 的等效跨浏览器解决方案有哪些 showModalDialog 在 IE 和 FF 3 中引入 我个人认为没有 但是有很多 UI 工具包提供了这样的功能 例如jQuery UI http jque
  • ng-model 和值组合不适用于输入文本框

    我有两个输入文本框 我需要组合在两个文本框中输入的值并将其显示在第三个文本框中 如果我只使用value在第三个文本框中 Box 1
  • 如何获取使用 .map 渲染的第一个元素的 ref?

    我需要在几行中显示视频 卡片 的缩略图 并重点关注第一个缩略图 我使用嵌套地图进行了显示 该代码基本上迭代视频数组并返回多行视频 我们如何关注第一个渲染的元素 我认为我们需要获得第一个要聚焦的元素的引用 但是我们如何在这里设置 ref 并在
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • Express.js Passport认证自动失败跳过策略

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标
  • Restangular - _.contains() 不是一个函数

    如果您最近通过 Bower 更新了 Restangular 它将安装最新的 Lodash 新的 4 0 然而 这是一个问题 因为 Restangular Angular 现在会抛出错误 contains 不是函数 你怎么解决 解决方案非常简
  • 如何更改订阅值?使用 rxJS

    我正在创建一个计时器 需要你的帮助 我刚刚学习 Angular 和 rxJS 对此我有一些疑问 我正在创建一个具有启动 停止 暂停 重置功能的计时器 并且 btn Reset 必须将我的计时器 暂停 到 300 毫秒 怎么做 D 我的启动定

随机推荐

  • 使用 gcc 编译 DLL

    Sooooo我正在写一个脚本解释器 基本上 我希望将一些类和函数存储在 DLL 中 但我希望 DLL 在链接到它的程序中查找函数 例如 program dll send code to dll gt parse code v code co
  • 使用 C# 配置 Wifi 设置

    如何使用 C 紧凑框架 为 Win Mobile 应用程序配置 Wifi 设置 所以交易是 配置网络 隐藏APP的SSID 使用 TKIP 进行 WPA 身份验证 强制用户和密码 不会提示最终用户进行身份验证 看看智能设备框架 http w
  • Android Studio 3 中的“将项目与 gradle 文件同步”按钮在哪里?

    This button disappeared from a new 3 1 version of AS Toolbar Before it showed as 现在不见了 EDIT 他们喜欢继续使用工具栏 从 Android Studio
  • Alertmanager,不同的警报规则有不同的间隔

    我正在使用alertmanager来获取prometheus指标的警报 我对不同的指标有不同的警报规则 是否可以为每个警报规则设置不同的时间间隔 例如对于metric1 我有rule1 我需要每天检查此规则间隔 对于 metric2 我有规
  • EAV 数据库架构

    我有一个包含超过 100K 条记录的数据库 很多类别和很多项目 每个类别具有不同的属性 一切都存储在 EAV 中 如果我尝试打破这个方案并为任何类别创建一个唯一的表 我必须避免什么吗 是的 我知道我可能会有很多表 并且需要更改它们 如果我想
  • Genymotion 错误:在 Yosemite 上“无法加载 VirtualBox 引擎”。已安装 VirtualBox

    我有一台配备 OS X Yosemite 的 Macbook Pro 13 英寸 内存 8 GB 显卡 Intel Iris Graphics 6100 1536 MB 我正在尝试将 Genymotion 设置为 Android 模拟器 我
  • 将一列 int64 (YYYYMMDDHHMMSS) 转换为不带分隔符的 datetime64

    这是我的 pandas 数据框中的数据 我想转换dateTime列成日期时间64这样我就可以检查是否重复fileName存在然后找到最新的文件dateTime 正如你所看到的 这里的日期时间格式是YYYYMMDDDHHMMSS没有分隔符 f
  • jQuery 创建整个 DOM 结构

    TOP TABLE var divTop div className dynamicTableTop html p options name p appendTo obj Create div var divAO div className
  • Chrome 扩展程序——我的源代码可供用户使用吗?

    我即将向 Chrome 网上商店发布我的第一个 Chrome 扩展 他们希望将代码压缩并上传 一旦通过批准 如果我理解正确的话 它将作为 crx 文件提供给用户 但这些 crx 文件是带有 crx 扩展名的简单 zip 文件 对吧 如果这样
  • 在传递给 google.setOnLoadCallback() 的函数中使用参数;

    我正在尝试使用 Google Visualization API 来显示从 MySQL 服务器收集的数据 我想使用 PHP 获取数据 然后将其传递到 javascript 函数调用中以创建图表 当我这样做时 我在将参数传递给传递给 goog
  • 如何使用 Core Graphics 和 CALayer 绘制更精确的线条

    您好 我很难让这个 UI 元素看起来像我想要的那样 看截图 http www study en0de com good not so good jpg 请注意右侧的图像 与左侧的图像 恰好是 safari 的屏幕截图 相比 线条宽度和暗度看
  • 点击 Google Contacts API 时出现“连接被同行重置”错误

    我正在尝试使用 Google Contacts API 将 Google Contacts 拉入 Rails 应用程序 我已完成 Oauth2 握手 现在使用我的访问令牌请求受保护的资源 这是代码 uri URI https www goo
  • 为什么我们需要错误类?

    We have Throwable类是其基类Error类 对于无法恢复的错误 和Exception类 对于可恢复的 errors So 1 gt we can throw一个实现的对象error类 虽然实现没有意义Error类因为我们有Ex
  • 如何在流星中的 DOM 准备好后执行辅助函数

    我有一个清单 li 如下所示 使用 Meteor startup 用 find 填充 然后我得到这些的所有数据属性 li li 使用 data 并将其放入一个对象中并尝试 return console log 它 以便我可以查看它是否有效
  • 使用MPMusicPlayerController,设置musicPlayer.currentPlaybackTime进行seek但需要秒才能生效

    我有一个 UISlider 充当洗涤器 当拖动拇指时 我执行以下操作 void seekTo double playbackTime mPlayer currentPlaybackTime playbackTime 效果很好 音乐寻求前进
  • 无法捕获托管代码中的本机异常

    我有一个混合的 NET 和本机代码控制台应用程序 由于 Visual C 运行时库致命错误 应用程序进程被终止 即使我使用以下内容 托管代码也不会捕获本机异常 尝试 捕获块 AppDomain UnHandledExption 标记Runt
  • C++ 中的内存栅栏/屏障:boost 或其他库有它们吗?

    这些天我正在阅读有关内存栅栏和屏障的内容 作为同步多线程代码和避免代码重新排序的一种方法 我通常在 Linux 操作系统下使用 C 进行开发 并且使用boost大量的库 但我找不到任何与之相关的类 你知道boost中是否存在栅栏的内存屏障或
  • Heroku on Rails - DATABASE_URL 无效

    编辑 一般建议是使用CEDAR stack 对于 RoR Gems Heroku 和 Git 来说还很陌生 以下教程 http ruby railstutorial org book ruby on rails tutorial http
  • 通过 FontAwesome 进行星级评定的 CSS

    我已经通过不同的方法尝试了 CSS 星级评定的一些变体 并且尝试通过 FontAwesome 而不是使用精灵来实现以下内容 我希望能够理想地包含半星 但这就是下面的示例失败的地方 这是我到目前为止所尝试过的 我无法让半 部分星在这里正常工作
  • 使用 EPSG:25832 投影在 Leaflet 中垂直对齐 TMS 图块

    我使用 Leaflet 和 Proj4Leaflet 来处理 25832 中的图块 该应用程序相当简单 我尝试将 EPSG 25832 中的图块叠加到全比例底图上 我已从瓷砖地图元信息中复制了各个分辨率和来源 我面临的问题是地图未对齐 一旦