五章-57-要素的多个选择方式

本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers 5.3.x api。

源码 见 1057.html ,对应的 官网示例
https://openlayers.org/en/latest/examples/select-features.html

https://openlayers.org/en/latest/examples/select-hover-features.html?q=Select

https://openlayers.org/en/latest/examples/select-multiple-features.html?q=Select

https://openlayers.org/en/latest/examples/vector-tile-selection.html?q=Select

image.png
要素的多种选择方式
condition: ol.events.condition.click
condition: ol.events.condition.pointerMove
condition: function(mapBrowserEvent) {……})
<!DOCTYPE html>
<html>
<head>
 <title>要素的多种选择方式</title>
 <link rel="stylesheet" href="../include/ol.css" type="text/css" />
 <script src="../include/ol.js"></script>
</head>
<style>
 html,
 body,
 .map {
   margin: 0;
   padding: 0;
   width: 100%;
   height: 90%;
 }
</style>

<body>

 <div id="map" class="map"></div>
 <form class="form-inline">
   <label>动作类型 &nbsp;</label>
   <select id="type" class="form-control">
     <option value="click" selected>点击</option>
     <option value="singleclick">单击</option>
     <option value="pointermove">悬浮</option>
     <option value="altclick">Alt+点击</option>
     <option value="none">无</option>
   </select>
   <span id="status">&nbsp;0 个已选择要素</span>
 </form>
 <script>


   var raster = new ol.layer.Tile({
     source: new ol.source.OSM()
   });

   var vector = new ol.layer.Vector({
     source: new ol.source.Vector({
       url: '../data/lands.geojson',
       format: new ol.format.GeoJSON()
     })
   });

   var map = new ol.Map({
     layers: [raster, vector],
     target: 'map',
     view: new ol.View({
       center: [0, 0],
       zoom: 2
     })
   });

   var select = null;

   var selectSingleClick = new ol.interaction.Select();


   var selectClick = new ol.interaction.Select({
     condition: ol.events.condition.click
   });


   var selectPointerMove = new ol.interaction.Select({
     condition: ol.events.condition.pointerMove
   });

   var selectAltClick = new ol.interaction.Select({
     condition: function (mapBrowserEvent) {
       return ol.events.condition.click(mapBrowserEvent) && ol.events.condition.altKeyOnly(mapBrowserEvent);
     }
   });

   var selectElement = document.getElementById('type');

    //实现切换动作
   var changeInteraction = function () {
     if (select !== null) {
       map.removeInteraction(select);
     }
     var value = selectElement.value;
     if (value == 'singleclick') {
       select = selectSingleClick;
     } else if (value == 'click') {
       select = selectClick;
     } else if (value == 'pointermove') {
       select = selectPointerMove;
     } else if (value == 'altclick') {
       select = selectAltClick;
     } else {
       select = null;
     }
     if (select !== null) {
       map.addInteraction(select);
       select.on('select', function (e) {
         document.getElementById('status').innerHTML = '&nbsp;' +
           e.target.getFeatures().getLength() +
           ' 个已选择的要素 (上次操作选择了 ' + e.selected.length +
           ' 个并且已取消选择 ' + e.deselected.length + ' 个要素)';
       });
     }
   };

   selectElement.onchange = changeInteraction;
   changeInteraction();


 </script>
</body>

</html>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容