阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Openlayer add mark及添加hover效果实例

297次阅读
没有评论

共计 2772 个字符,预计需要花费 7 分钟才能阅读完成。

导读 这篇文章主要为大家介绍了 Openlayer add mark 及添加 hover 效果实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
add mark
方法一

如果有多个点的话,可以生成多个 feature(循环调用 addFeature)

const iconStyle = () =>
  new Style({image: new Icon({ scale: 0.2, src: image}) });
const addFeature = (point: Coordinate) =>
  new Feature({geometry: new Point(Proj.fromLonLat(point)),
    properties,
    name: "当前位置",
    population: 4000,
    rainfall: 500,
  });
const pointSource = new VectorSource({features: [addFeature(point)],
});
const clusterSourceForLayer = new Cluster({
  source: pointSource,
  distance: 50,
});
const pointLayer = new VectorLayer({
  source: clusterSourceForLayer,
  zIndex: 3,
  style: iconStyle,
});
map.addLayer(pointLayer);
pointLayer.set("baseMap", "iconLayer");
方法二

用 geojson 去渲染 mark

const iconStyle = () =>
  new Style({image: new Icon({ scale: 0.2, src: image}) });
const pointSource = new VectorSource({features: new GeoJSON().readFeatures(geojson, {
    dataProjection: "EPSG:4326",
    featureProjection: "EPSG:3857",
  }),
});
const clusterSourceForLayer = new Cluster({
  source: pointSource,
  distance: 50,
});
const pointLayer = new VectorLayer({
  source: clusterSourceForLayer,
  zIndex: 3,
  style: iconStyle,
});
map?.addLayer(pointLayer);
pointLayer.set("baseMap", "iconLayer");
geojson 格式

生成 geojson 的方式:

  • 自己手动构建
  • 使用 @turf/helpers,它提供了 point、featureCollection 等方法
  • {
      "type": "FeatureCollection",
      "features": [
        {
          "type": "Feature",
          "properties": {
            "id": "customer002",
            "name": "c2"
          },
          "geometry": {
            "type": "Point",
            "coordinates": [119.777738303153, 32.91324329434815]
          }
        },
        {
          "type": "Feature",
          "properties": {
            "id": "customerId007",
            "name": "张三"
          },
          "geometry": {
            "type": "Point",
            "coordinates": [109.54393448864997, 35.7427088696462]
          }
        }
      ]
    }
    hover mark
    popover

    overlay 需要一个 dom 元素,这里是用过 ref 获取的

    const o = new Overlay({element: ref.current});
    map?.addOverlay(o);
    setOverlay(o);
    方法一

    用 select 去做,它有个 select 事件

    它事件参数中,有个 selected,如果不是空数组,说明你鼠标正在 hover mark,就可以弹出 popover,显示你想要显示的内容

    const select = new Select({
      condition: pointerMove,
      hitTolerance: 1,
      layers: [iconLayer],
      style: iconStyle,
    });
    select.on("select", (e) => {const { selected} = e;
      if (selected.length) {const [feature] = selected;
        const _feature = feature.get("features")[0];
        const id = _feature.get("id");
        const name = _feature.get("name");
        setContent({name, id});
        const coordinate = feature.get("geometry").flatCoordinates;
        overlay.setPosition(coordinate);
      } else {overlay.setPosition(undefined);
      }
    });
    map?.addInteraction(select);
    方法二

    用 select 去做,本质也是通过 pointerMove 事件,所以可以直接在 map 上监听 pointerMove 事件

    具体的实现方式我没有去尝试,通过上面的推断,我觉得是可行的

    map.on("pointerMove", (e) => {});
    clear mark

    通过 useEffect 返回的函数清理地图中的 mark

    useEffect(() => {return () => {
        // 卸载页面中的 mark
        iconSource?.getFeatures().forEach((feature) => {iconSource?.removeFeature(feature);
        });
      };
    }, [points, iconSource]);
    方法 addInteraction、addOverlay、addLayer 区别

    我没有搞清楚他们之间的区别,目前了解的是:

  • addLayer:是添加图层,图层分为:
    1. 栅格:Tile(图片)
      矢量:Vector(geojson、lerc)
      矢量栅格:VectorTile(pbf)
  • addInteraction:添加 Select 和 Modify
  • addOverlay:添加 Overlay 和 Control
    1. Popover 可以用 Overlay 去做

    以上就是 Openlayer add mark 及添加 hover 效果实例详解的详细内容

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥玩云-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2772字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

    星哥玩云

    星哥玩云
    星哥玩云
    分享互联网知识
    用户数
    4
    文章数
    19348
    评论数
    4
    阅读量
    7806752
    文章搜索
    热门文章
    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
    我把用了20年的360安全卫士卸载了

    我把用了20年的360安全卫士卸载了

    我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
    阿里云CDN
    阿里云CDN-提高用户访问的响应速度和成功率
    随机文章
    零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

    零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

    零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
    星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

    星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

    星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
    星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

    星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

    星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
    这个开源软件130k的star数!让电脑轻松管理安卓手机的神器

    这个开源软件130k的star数!让电脑轻松管理安卓手机的神器

    这个开源软件 130k 的 star 数!让电脑轻松管理安卓手机的神器 大家好,我是星哥。今天给大家安利一款宝...
    我把用了20年的360安全卫士卸载了

    我把用了20年的360安全卫士卸载了

    我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...

    免费图片视频管理工具让灵感库告别混乱

    一言一句话
    -「
    手气不错
    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
    手把手教你,购买云服务器并且安装宝塔面板

    手把手教你,购买云服务器并且安装宝塔面板

    手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
    星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

    星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

    星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
    星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

    星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

    星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
    告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

    告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

      告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...