• openlayers 框选得到在选框内的要素,并标注出这些要素的名称


      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4   <meta charset="UTF-8">
      5   <meta name="viewport" content="width=device-width, initial-scale=1.0">
      6   <link rel="stylesheet" href="https://openlayers.org/en/v5.3.0/css/ol.css" />
      7   <script type="text/javascript" src="https://openlayers.org/en/v5.3.0/build/ol.js"></script>
      8   <title>Document</title>
      9 </head>
     10 <body>
     11   <div id="map"></div>
     12   <div id="selectedFeatures"></div>
     13   <script>
     14       var beijing = ol.proj.fromLonLat([116.28, 39.54]);
     15       var map = new ol.Map({
     16           target: 'map',
     17           layers: [
     18           new ol.layer.Tile({  
     19             source: new ol.source.OSM()
     20           })  
     21           ],
     22           view: new ol.View({
     23               center: beijing,
     24               zoom: 4
     25           })
     26       });
     27 
     28       //实例化矢量点要素,通过矢量图层添加到地图容器中
     29       //这样就实现了预先加载图文标注
     30       var iconFeature = new ol.Feature({
     31           geometry: new ol.geom.Point(beijing),
     32           name: '北京市',                         //名称属性
     33           population: 2115                       //人口数(万)
     34       });
     35       //设置点要素样式
     36       iconFeature.setStyle(createLabelStyle(iconFeature));
     37       //矢量标注的数据源
     38       var vectorSource = new ol.source.Vector({
     39           features: [iconFeature]
     40       });
     41       //矢量标注图层
     42       var vectorLayer = new ol.layer.Vector({
     43           source: vectorSource
     44       });
     45       map.addLayer(vectorLayer);
     46 
     47       //矢量标注样式设置函数,设置image为图标ol.style.Icon
     48       function createLabelStyle(feature){
     49         //   console.log(feature);
     50           return new ol.style.Style({
     51               image: new ol.style.Icon({
     52                   anchor: [0.5, 60],              //锚点
     53                   anchorOrigin:'top-right',       //锚点源
     54                   anchorXUnits: 'fraction',       //锚点X值单位
     55                   anchorYUnits: 'pixels',         //锚点Y值单位
     56                   offsetOrigin: 'top-right',      //偏移原点
     57                   opacity: 0.75,
     58                   scale: 0.05,
     59                   src: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594359193211&di=1d6bb819a5daa724ff65cc4d011d4d42&imgtype=0&src=http%3A%2F%2Fku.90sjimg.com%2Felement_pic%2F17%2F10%2F27%2F05dc60e54e3aa5d093cdc32611303643.jpg'  //图标的URL
     60               }),
     61               text: new ol.style.Text({
     62                   textAlign: 'center',            //位置
     63                   textBaseline: 'bottom',         //基准线
     64                   font: 'normal 12px 微软雅黑',    //文字样式
     65                   text: feature.get('name'),      //文本内容
     66                   fill: new ol.style.Fill({       //文本填充样式(即文字颜色)
     67                       color: '#000'
     68                   }),
     69                   stroke: new ol.style.Stroke({
     70                       color: '#F00', 
     71                        2
     72                   })
     73               })
     74           });
     75       }
     76     var coordinate1 = [10806361.310845079, 3942927.667062532];        //鼠标单击点的坐标
     77           var coordinate2 =  [11540156.782382771, 4539747.983913189]      //鼠标单击点的坐标
     78           var coordinate3 =  [12225032.55581795, 3982063.4255445423]      //鼠标单击点的坐标
     79           var arr =[coordinate1,coordinate2,coordinate3]
     80           //新建一个要素ol.Feature
     81           arr.forEach((ar,index) => {
     82               var newFeature = new ol.Feature({
     83                   geometry: new ol.geom.Point(ar),  //几何信息
     84                   name: '标注点'+index
     85               });
     86               newFeature.setStyle(createLabelStyle(newFeature));      //设置要素样式
     87               vectorSource.addFeature(newFeature);  
     88           });
     89       
     90 var draw = new ol.interaction.Draw({
     91     source: vectorLayer.getSource(),
     92     type:"Circle",
     93     style:new ol.style.Style({
     94                 // 将点设置成圆形样式
     95                 image: new ol.style.Circle({
     96                     // 点的颜色
     97                     fill: new ol.style.Fill({
     98                         color: '#F00'
     99                     }),
    100                     // 圆形半径
    101                     radius: 5
    102                 }),
    103                 // 线样式
    104                 stroke: new ol.style.Stroke({
    105                     color: '#0F0',
    106                     lineCap: 'round',       // 设置线的两端为圆头
    107                      5                
    108                 })
    109             }),
    110             geometryFunction: ol.interaction.Draw.createBox() // 使画出来的现状为矩形
    111 
    112 });
    113     map.addInteraction(draw);
    114 draw.on('drawend',function(evt){
    115     var polygon = evt.feature.getGeometry();
    116     setTimeout(function(){              //如果不设置延迟,范围内要素选中后自动取消选中,具体原因不知道
    117         var extent = polygon.getExtent()
    118         var features = vectorLayer.getSource().getFeaturesInExtent(extent); //先缩小feature的范围
    119         var str = "";
    120         for(var i=0;i<features.length;i++){
    121             var newCoords = features[i].getGeometry().getCoordinates();
    122              if (features[i].get("name")) {
    123                 str += "<div class="selectedItem" οnclick='showDeviceOnMap(""+features[i].getId()+"");'>"+features[i].get("name")+"</div>";
    124              }   
    125         }
    126         document.getElementById('selectedFeatures').innerHTML = str
    127     },300)
    128 })
    129   </script>
    130 </body>
    131 </html>

     原创:https://www.cnblogs.com/wwj007/p/14029494.html

  • 相关阅读:
    友元类和友元函数
    C++中构造函数和析构函数调用的时机
    Linux 下svn恢复到某一版本
    lua 中pairs 和 ipairs区别
    孤儿进程与僵尸进程
    union
    关于C++ const 的全面总结
    后台管理左侧菜单
    全选-反选-取消
    Dom-直接 /间接选择器
  • 原文地址:https://www.cnblogs.com/java0619/p/14035766.html
Copyright © 2020-2023  润新知