gpt4 book ai didi

javascript - 使用 OpenLayers 鼠标拖动 kml 要素

转载 作者:数据小太阳 更新时间:2023-10-29 05:47:19 28 4
gpt4 key购买 nike

链接:http://www1.qhoach.com/

当您拖动时,这张 map 会被平移...但是如果您拖动 KML 要素(带圆圈的图标),则什么也不会发生

最佳答案

首先,在您的应用程序中有四个级别的 map ,包括您在问题中用圆圈图标提到的矢量图层。

   0: "Đường Sá"         ||---> Overlay Tiles
1: "Vệ Tinh" ||---> Overlay Tiles
2: "TMS Overlay" ||---> Markers ~ Icons
3: "KML" ||---> Vector

分析:从零开始到最后一个,只有矢量似乎是最后一个,其他的仍然是覆盖图 block 。为了解决这个问题,我们必须关注标记层,即特征(图标)。
正如您在 map 上看到的那样,当您尝试拖动 map 时, map 的click 事件已被触发。您不能拖动,因为事件注册正在为标记层工作首先不是 map 。这意味着为了拖动 map ,必须在单击后移动鼠标(拖动)。因为你在矢量图层上尝试这个,所以没有机会将事件传递给叠加层。

解决方案:
我建议您使用两种方法来解决这个错误类型的问题。

任重而道远
OpenLayers 中有一个名为 SelectFeature 的控件继承自 Handler.Feature。此控件通常允许在悬停时单击给定层的矢量特征。这意味着此处理程序可以响应与任何绘制的特征相关的鼠标事件。只有回调与特征相关,需要其中之一点击。现在我们所要做的就是在我们平移叠加图 block 时将点击事件返回。

var selectFeat = new OpenLayers.Control.SelectFeature(
vector, {toggle: true, clickout:false});
selectFeat.handlers['feature'].stopDown = false;
selectFeat.handlers['feature'].stopUp = false;
map.addControl(selectFeat);//instance of map
selectFeat.activate();

激活此控件后,您必须确保您的层将事件传递到另一层。要做到这一点,只需

layer.events.fallThrough = true;//both for vector and marker layers

到目前为止,我们完成了所有这些操作后,还有最后一件事要做:这就是交换标记和 kml 图层的顺序。
这应该是最简单的方法
那是图层上的 z-index。您可以检查上面的图层序列,具有最高 id 的图层也具有最高的 z-index。

layer.setZIndex(...any number...);

除了这个解决方案,简单的方法只允许你在 map 上拖动,当所有突然点击图标的功能都可能在没有很长的路途时丢失,所以你可以选择将它们留在后面。

关于javascript - 使用 OpenLayers 鼠标拖动 kml 要素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122160/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com