美文网首页openlayers学习笔记
四章-29-实现一个简单标记

四章-29-实现一个简单标记

作者: 彩云飘过 | 来源:发表于2020-04-20 17:51 被阅读0次

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

源码 见 1029.html ,对应的 官网示例 https://openlayers.org/en/latest/examples/icon.html?q=style

https://openlayers.org/en/latest/examples/icon.html?q=style

https://openlayers.org/en/latest/examples/icon-negative.html?q=style

image.png

<!DOCTYPE html>
<html>

<head>
  <title></title>
  <link rel="stylesheet" href="../include/ol.css" type="text/css">
  <link rel="stylesheet" href="../include/bootstrap.css" type="text/css">
  <script src="../include/ol.js"></script>
  <script src="../include/jquery.js"></script>
  <script src="../include/bootstrap.min.js"></script>

</head>

<body>
  <div id="popup" style="width:40px"></div>
  <div id="map" class="map"></div>

  <script>
    var iconFeature = new ol.Feature({
      geometry: new ol.geom.Point([0, 0]),
      name: '虚无岛',
      population: 4000,
      rainfall: 500
    });

    var iconStyle = new ol.style.Style({
      image: new ol.style.Icon(({
        anchor: [0.5, 46],
        anchorXUnits: 'fraction',
        anchorYUnits: 'pixels',
        src: '../data/icon.png'
      }))
    });

    iconFeature.setStyle(iconStyle);

    var vectorSource = new ol.source.Vector({
      features: [iconFeature]
    });

    var vectorLayer = new ol.layer.Vector({
      source: vectorSource
    });

    var rasterLayer = new ol.layer.Tile({
      source: new ol.source.TileJSON({
        url: 'https://api.tiles.mapbox.com/v4/mapbox.geography-class.json?secure&access_token=pk.eyJ1IjoiYWhvY2V2YXIiLCJhIjoiY2pzbmg0Nmk5MGF5NzQzbzRnbDNoeHJrbiJ9.7_-_gL8ur7ZtEiNwRfCy7Q',
        crossOrigin: ''
      })
    });

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

    var element = document.getElementById('popup');


    var popup = new ol.Overlay({
      element: element,
      positioning: 'bottom-center',
      stopEvent: false,
      offset: [0, -50]
    });
    map.addOverlay(popup);


    //当单击地图时,弹框Overlay,显示要素名称
    map.on('click', function (evt) {
      var feature = map.forEachFeatureAtPixel(evt.pixel,
        function (feature) {
          return feature;
        });
      if (feature) {
        var coordinates = feature.getGeometry().getCoordinates();
        popup.setPosition(coordinates);
        $(element).popover({
          title: "信息:",
          placement: 'top',
          html: true,
          content: '<div style="width:50px">' + feature.get('name') + '</div>'
        });
        $(element).popover('show');
      } else {
        $(element).popover('destroy');
      }
    });


    //以下用在触摸屏,当手指离开屏幕时,弹框消失
    map.on('pointermove', function (e) {
      if (e.dragging) {
        $(element).popover('destroy');
        return;
      }
      var pixel = map.getEventPixel(e.originalEvent);
      var hit = map.hasFeatureAtPixel(pixel);
      map.getTarget().style.cursor = hit ? 'pointer' : '';
    });
  </script>
</body>

</html>

相关文章

  • 四章-29-实现一个简单标记

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

  • Markdown简单教程

    Markdown 是什么? Markdown 是一种轻量级的纯文本标记语言。使用其对文本进行简单的标记,从而实现标...

  • JAVA的内存分配和垃圾收集2:垃圾回收的方法

    垃圾收集的算法的实现是很复杂的,我这讲的只是介绍下几种算法的思想。 标记-清楚算法 简单来说就是先标记,在把标记的...

  • Markdown 入门

    什么是markdown 简单来说,markdown就是一个简单的标记语言。这些标记语言和html的一些标记相对应。...

  • 实践之路-《MarkDown文档 语法教程》

    一、宗旨 MarkDown的目标是实现「易读易写」。Markdown是一种纯文本格式的标记语言。通过简单的标记语法...

  • Markdown 语法入门

    Markdown作为一种使用普通文本编辑器编写的标记语言,通过简单的标记语法,设置文本不同的格式。以实现 [易读易...

  • vue学习之做事列表todoList

    这次用vue实现简单的做事列表单。包含事件添加、统计、删除、标记(已完成/未完成)。 一、功能实现 做事列表也是通...

  • 第四十节 暂停游戏

    本节,我们先实现暂停功能,再制作场景中的暂停对象。 功能非常简单,添加一个暂停标记,然后在键盘事件、核心逻辑、消除...

  • 《洋葱阅读法》曾国藩训练营15

    ❤️阅读《洋葱阅读法》第四章❤️ 作者是运用什么方法做读书笔记的 一、标记 标记就是用贴便利贴、荧光笔标记...

  • iOS通讯录的简单实现

    本文是基于UITableView实现一个简单的通讯录,支持滑动删除与标记星标好友以及索引功能。作为iOS开发者我...

网友评论

    本文标题:四章-29-实现一个简单标记

    本文链接:https://www.haomeiwen.com/subject/jjfcuhtx.html