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

标签 javascript maps openlayers kml

链接: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/

相关文章:

javascript - jQuery - 同一页面上的多个图像过滤器

java - 如何创建 GPS 折线列表?

javascript - OpenLayers strictExtent 缩放时不限制

javascript - 如何让 openlayers map 显示在 twitter bootstrap 中?

javascript - 如何在 React Native 应用程序中添加 "Set as Wallpaper"选项

HTML 中动态下拉菜单的 JavaScript onchange 事件

javascript - 这个正则表达式有什么问题? JSLint 抛出错误

android - geo :latitude, longitude?z=zoom in android 带我到我当前的位置

Android - 两个城市之间的距离

JavaScript 控制台可以看到对象的内容,但我无法访问它