LeafletJS:如何使图层不可移动?

2023-12-08

我想制作一个简单的画布层(不是平铺画布,而是一个大画布),但我找不到如何将图层放在外面mapPane以记录的方式使其不可拖动。

我应该使用“未记录”的方法还是应该使用“反向转换”黑客?


如果我理解正确的话,您希望将自己的画布覆盖到传单地图上,但这样它就不会与地图的其余部分(如平铺图层或标记)一起平移(被拖动)。

因此,它就像一个控件(如缩放、图层切换和属性控件),相对于地图容器保持在相同位置,只不过它会覆盖整个地图视图端口。

正如您似乎已经发现的那样,一旦您将元素插入map pane,当用户拖动/平移时,它将与其余地图元素一起移动。

因此,您可以简单地将其附加到地图容器中,作为sibling地图窗格的:

// http://leafletjs.com/reference-1.3.0.html#map-getcontainer
map.getContainer().appendChild(myCanvasElement);

然后你需要调整canvas元素的CSS:

  • 绝对定位
  • 在其他兄弟姐妹之上(地图窗格有一个z-index of 400,但您可能希望保持在其他控件之下,这些控件具有z-index of 1000)
  • 让鼠标事件通过(以便用户仍然可以使用地图对象,例如单击标记等)
#myCanvasElement {
  position: absolute;
  /* Let mouse events go through to reach the map underneath */
  pointer-events: none;
  /* Make sure to be above the map pane (.leaflet-pane) */
  z-index: 450;
}

一个工作代码片段示例:

var map = L.map('map').setView([48.86, 2.35], 11);

var myCanvasElement = document.getElementById('myCanvasElement');

// Adjust the canvas size, assuming we want to cover the entire map.
var mapSize = map.getSize(); // http://leafletjs.com/reference-1.3.0.html#map-getsize
myCanvasElement.width = mapSize.x;
myCanvasElement.height = mapSize.y;

// Move the canvas inside the map container.
var mapContainer = map.getContainer(); // http://leafletjs.com/reference-1.3.0.html#map-getcontainer
mapContainer.appendChild(myCanvasElement);

// Draw on the canvas...
var context = myCanvasElement.getContext('2d');
context.strokeStyle = 'rgb(0, 0, 200)';
var w = 200;
var h = 100;
var x = (mapSize.x - w) / 2;
var y = (mapSize.y - h) / 2;
context.strokeRect(x, y, w, h);

L.marker([48.86, 2.35]).bindPopup('Paris').addTo(map);

L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
  attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
#myCanvasElement {
  position: absolute;
  /* Let mouse events go through to reach the map underneath */
  pointer-events: none;
  /* Make sure to be above the map pane (.leaflet-pane) */
  z-index: 450;
}
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ==" crossorigin="" />
<script src="https://unpkg.com/[email protected]/dist/leaflet-src.js" integrity="sha512-IkGU/uDhB9u9F8k+2OsA6XXoowIhOuQL1NTgNZHY1nkURnqEGlDZq3GsfmdJdKFe1k1zOc6YU2K7qY+hF9AodA==" crossorigin=""></script>

<div id="map" style="height: 180px"></div>

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

LeafletJS:如何使图层不可移动? 的相关文章

  • 使用 sf 列调整 Leaflet (R) 中的边界

    我正在 Shiny 中制作一个小应用程序 它保存国家和地区的数据 用户可以在其中选择一个区域 然后的想法是 我在应用程序中拥有的传单地图将放大并聚焦于所选区域 即用户单击 欧洲 地图会放大到欧洲 我不知道应该如何使用这些简单的功能geome
  • 从外部访问 Leaflet.js GeoJson 功能

    我想从外部与传单驱动的地图的 GeoJson 覆盖层 多边形 进行交互L 的领域 但我似乎无法访问由L 互动包括 获取边界 我的特征 fitBounds 我的特征 设置样式 ETC 我可以看到 Leaflet 暴露了 L GeoJSON g
  • 如何从 shapefile leaflet R 访问多边形信息

    我使用以下方法制作了伦敦地图https data london gov uk dataset statistical gis boundary files london https data london gov uk dataset st
  • 如何在与国家 R 传单相对应的地图多边形上分配弹出窗口

    我正在尝试编写一个脚本 允许人们单击一个国家 地区 然后会出现一个弹出窗口并显示该国家 地区的名称和相应的值 我已经成功创建了地图和每个国家 地区的边界 但是当您单击 例如俄罗斯 时 弹出窗口将显示印度 下面是该脚本的简化版本 librar
  • 如何让传单地图画布具有 100% 的高度?

    我的传单画布目前如下所示 高度为 700 像素 不过我希望它的高度为 100 以便占据整个空白区域 高度 100 在地图画布的 CSS 属性中不起作用 我找到了一些解决方案 但它们只适用于谷歌地图 有没有人有解决方案 即使这只是一个解决方法
  • 如何在 R 中按下传单弹出窗口时创建事件?

    当我单击传单多边形时 我想让 tabPanel 变为闪亮 我对如何做到这一点有一些想法 但我找不到实现它们所需的信息 我在选项卡面板中有传单 但我想在单击多边形时切换到另一个选项卡 leaflet llmap gt addTiles gt
  • 如何在大型光栅图像上将 Leaflet FlyTo() 与 unproject() 和 GeoJSON 数据结合使用?

    我正在使用 Leaflet 构建故事地图 使用切片为图块的大图像而不是 真实世界 地图数据 我正在使用这个插件 https commenthol github io leaflet rastercoords https commenthol
  • 将鼠标悬停在 R 中的传单时弹出?

    我的传单地图看起来像这样 library sp library leaflet circleFun lt function center c 0 0 diameter 1 npoints 100 r diameter 2 tt lt seq
  • 使用 leaflet 确定直线是否与多边形相交

    我正在尝试找出确定一条线是否穿过多边形的最佳方法 其中该线上的点可能不会落在多边形内 如下图所示 我的数据是多个多边形 我希望查看一条线 纬度 经度到纬度 经度 是否穿过 1 个或多个多边形 leaflet 有一个 leaflet pip
  • Leaflet Map - 第二个多边形使第一层不可点击

    我正在制作美国社区调查数据地图 目前我有一个主要层 如下所示plotMerge incomePerCapita 它运作良好 有一个完全充实的弹出窗口 图像等等 当我添加第二层以提供县和地区边界时 区域边界变得不可单击 似乎被新层掩盖了 如果
  • 获取传单地图放大时的标记列表

    我是传单新手 我已按照以下步骤设置了地图https github com Asymmetrik ngx leaflet https github com Asymmetrik ngx leaflet 我正在尝试获取地图放大区域中的标记列表
  • 显示带有跨越 180 条经线的传单的 GeoJSON

    我正在尝试显示跨越第 180 条子午线的 geoJSON 对象 在本例中为俄罗斯的轮廓 目前 该国家 地区的一部分显示在地图的左侧 一部分显示在右侧 看看传单 似乎有一个解决方案 但这似乎不起作用 https github com Leaf
  • 传单地图显示为灰色

    我正在启动 leaflet js快速开始 http leafletjs com examples quick start html但我的地图显示为灰色 我缺少什么吗 脚本 js var leafletMap L map leafletMap
  • 传单 - 使用纬度 + 距离(米)+ 角度(度)创建标记

    如何计算距标记 A 给定距离 米 和给定角度 度 的新点 标记 B Google API 有这个 但我在传单中找不到它 var pointA new google maps LatLng 25 48 71 26 var radiusInKm
  • 网络上的等角柱状图

    我计划为游戏的标记 图钉 构建在线地图 但我无法设置标记的正确纬度 原始地图是一个2048 2048px 的正方形 然后我得到了标记 数千个 地图坐标使用 0 到 100 之间的 x y 表示法设置 0 0 是top left角和100 1
  • 传单 - 导入 Geojson - Angular 6

    我尝试将 GeoJson 文件导入到 Angular 的应用程序 6 中的传单中 通过这个解决方案 我的 geojson 是在 leafletmap 中绘制的 但我有这个错误 我无法构建我的应用程序 有人知道一种解决方案吗 错误 TS234
  • LeafletJs只显示一个国家

    我使用 Leafletjs 和 D3 来显示地图 我只想在地图上显示英国 Leaflet和D3是否可以只显示英国 这当然是可能的 现在的解决方案取决于您是想使用 D3 绘制英国 还是想从 Tile Server 获取它 在后一种情况下 有一
  • 运行 ng build --prod 时传单标记图标 url 编译错误

    由于某种原因 Leaflet 标记图标 url 在运行时编译错误ng build prod相反 当跑步时ng build传单标记图标 url 很好 我的环境 Angular CLI 7 0 5 Node 11 2 0 OS linux x6
  • 将哨兵图层添加到传单地图

    这就是我定义获取哨兵的 wms 图像的 url 的方式 哨兵2 https kade si cgi bin mapserv SERVICE WMS VERSION 1 3 0 REQUEST GetMap FORMAT image jpeg
  • 在传单包中使用 popupOptions()

    我正在关注 Robin Lovelace 博客上的传单教程 http robinlovelace net r 2015 02 01 leaflet r package html http robinlovelace net r 2015 0

随机推荐

  • 第 n 个范围的 CSS 选择器?

    如何调整下面的 CSS 选择器 myTableRow td nth child background color FFFFCC 所以它适用于td列2 4 table tr class myTableRow td column 1 td td
  • 有没有办法将 Linux 共享库加载到特定的内存位置?

    我有一个 Linux 应用程序 它在运行时加载非常小的 一些小函数 共享库 由于各种重要原因 我需要将共享库加载到特定的虚拟内存范围 然而 dlopen 没有提供任何方法 我可以看到 来告诉它或提示它 将其加载的内容放在哪里 有没有办法告诉
  • 导入错误:没有名为“app”的模块

    我正在开发一个具有以下树结构的项目 Project app main py svg to png py init py tests init py unittests basic test py init py 我正在使用以下命令将应用程序
  • Google App Engine - 数据存储实体的 ID 是否会为负数?

    数据存储实体的 ID 是否会为负数 或者它们保证是正数吗 我找不到明确说明这一点的文档 但我从未见过负面的文档 这docs确实 随着新实体的创建 这一数字通常会增加 但不应严格依赖它们 因为您可能会得到稍微乱序的 id 例如 10 11 1
  • 用 mod 重写删除尾部斜杠?

    这与我之前的问题有关 可以查看here 我希望能够删除 URL 中的尾部斜杠 这样它就不会弄乱我网站的某些区域 htaccess 代码在这里 s File Exists RewriteCond REQUEST FILENAME s OR l
  • Rails 3 中不带尾部斜杠的重定向到规范路线

    在 Rails 3 上 我尝试从没有尾部斜杠的 URL 重定向到有斜杠的规范 URL match test to gt redirect test 但是 上面的路由同时匹配 test 和 test 导致重定向循环 如何使其仅匹配不带斜杠的版
  • 如何在C++中生成随机数?

    我正在尝试用骰子制作游戏 并且需要其中包含随机数 以模拟骰子的侧面 我知道如何使其在 1 到 6 之间 使用 include
  • isolatedStorage:删除卸载程序中的首选项?

    我们的应用程序将用户首选项保存在独立存储中 然而 事实证明 从我们的卸载程序中删除这些文件是很棘手的 我可以枚举隔离存储中的所有文件 使用 MSDN 示例代码 找到与我们的强名称密钥相关的文件 并尝试删除 删除它们 不幸的是 这就是一切崩溃
  • 如何运行后台线程定期清理列表中的某些元素?

    我目前正在实施缓存 我已经完成了基本的实现 如下所示 我想要做的是运行一个线程来删除满足某些条件的条目 class Cache int timeLimit 10 how long each entry needs to be kept af
  • 为什么在 clojure 中 will (seq #{3 1 22 44}) 会输出 (1 3 44 22) ?

    它是如何工作的 序列 3 1 22 44 为什么顺序会像 1 3 44 22 因为根据定义 集合数据结构是无序的 http en wikipedia org wiki Set data struct 更准确地说 Clojure 的内置集 b
  • 如何在事件侦听器中将元素作为参数传递

    我有一个程序 其中有大量可重用元素 所有这些元素都需要事件侦听器 因此 我需要一种从侦听器获取元素的方法 这是我想在代码中执行的操作 document querySelectorAll class forEach function el e
  • Telegram 机器人等待用户回复

    下面的代码是针对电报机器人这基本上需要一个人username and password并验证它以提供他的平均支出 我们看到的问题是机器人等待用户发送他的用户名和密码10 sec要么浪费时间 要么 没有给予足够的时间 我怎样才能编程 让机器人
  • 模拟用户在 QSystemTrayIcon 中单击

    即使通过activated插槽正在执行 菜单仍未显示 我通过手动单击托盘图标和模拟单击进行了跟踪 并且其执行逻辑相同 目前我有 class MyClass QObject def init self testSignal connect s
  • ServletActionContext.getRequest() 返回 NULL

    我正在处理使用 Servlet 和 Struts2 的混合情况 我正在调用 HTTPServlet 并在其中处理数据 然后我需要调用struts API来将数据插入数据库 我也在使用 HTTPSession 所以我打电话 ServletAc
  • 如何将 BindableLayout.ItemsSource 设置为其他文件中的 ObservableCollection

    目前我有一个 TasksGroupPageViewModel cs 其中包含我的两个 ObservableCollection public ObservableCollection
  • 我如何向我的 Jena 本体添加一些三元组?

    I have instance1 of class1 and instance2 of class2 我也定义了HasName object property 在我的本体论中 现在 我如何添加三重 instance1 HasName ins
  • 当文档readyState完成时如何触发事件

    我想在 DOM 完全加载时触发事件 我结帐了document readyState但这不是一个事件 我想在以下情况下解雇它readyState做完了 我怎么做 一些简单的谷歌搜索将我指向了这段代码 alternative to DOMCon
  • Newtonsoft JSON.net 反序列化错误,其中 JSON 中的字段更改顺序

    这是一个从 Android 设备获取请求的 WCF 服务 相同的请求适用于 Lollipop 设备 而不适用于 jellybean 设备 因为 jellybean 在创建时以不同方式排列 JSON 例外情况 反序列化对象时出现意外标记 字符
  • 如果我使用 Firebase 简单用户名和密码身份验证,如何返回用户列表

    不确定我是否做错了什么 但使用这个 apihttps www firebase com docs security simple login email password html我可以根据返回消息成功创建一个用户 但我在 Forge 控制
  • LeafletJS:如何使图层不可移动?

    我想制作一个简单的画布层 不是平铺画布 而是一个大画布 但我找不到如何将图层放在外面mapPane以记录的方式使其不可拖动 我应该使用 未记录 的方法还是应该使用 反向转换 黑客 如果我理解正确的话 您希望将自己的画布覆盖到传单地图上 但这