【openlayers-3】加载图标

 

目录

1、通过overlay方式添加

2、通过overlay + css方式

3、通过Feature + style方式实现 


在OpenLayer3中添加图标有两种方式,一种是通过overlay方式,另一种是通过Feature + Style的方式。 

1、通过overlay方式添加

<div id="mapCon" style="width: 100%; height: 100%; position: absolute;"></div>
<div id="testpng"><img src="../testdata/data.png" alt="示例锚点"/></div>
<script type="text/javascript">var url = 'https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}';var map = new ol.Map({// 设置地图图层layers: [new ol.layer.Tile({ source: new ol.source.XYZ({ url: url }) })],// 设置显示地图的视图view: new ol.View({center: [117.23, 36.43],zoom: 10,projection: 'EPSG:4326'//设置坐标系,地图本身3857坐标系,即横轴墨卡托投影,因为中心点用的度,所以设置成wgs84代号是4326}),// 让id为map的div作为地图的容器target: 'mapCon',
});// 把上面的图标附加到地图上,需要一个ol.Overlay
var anchor = new ol.Overlay({element: document.getElementById('testpng')
});
// 关键的一点,需要设置附加到地图上的位置
anchor.setPosition([117.26, 37.2]);
// 然后添加到map上
map.addOverlay(anchor);
</script>

2、通过overlay + css方式添加

实现代码和上述方式一致,在body中添加style。

<!--定义动画,图标先放大,再缩小-->
<style type="text/css">
@keyframes zoom
{from {top: 0; left: 0; width: 32px; height: 32px;}50% {top: -16px; left: -16px; width: 64px; height: 64px;}to {top: 0; left: 0; width: 32px; height: 32px;}
}@-moz-keyframes zoom /* Firefox */
{from {top: 0; left: 0; width: 32px; height: 32px;}50% {top: -16px; left: -16px; width: 64px; height: 64px;}to {top: 0; left: 0; width: 32px; height: 32px;}
}@-webkit-keyframes zoom /* Safari 和 Chrome */
{from {top: 0; left: 0; width: 32px; height: 32px;}50% {top: -16px; left: -16px; width: 64px; height: 64px;}to {top: 0; left: 0; width: 32px; height: 32px;}
}@-o-keyframes zoom /* Opera */
{from {top: 0; left: 0; width: 32px; height: 32px;}50% {top: -16px; left: -16px; width: 64px; height: 64px;}to {top: 0; left: 0; width: 32px; height: 32px;}
}/* 应用css动画到图标元素上 */
#taiyang
{display: block;position: absolute;animation: zoom 5s;animation-iteration-count: infinite; /* 一直重复动画 */-moz-animation: zoom 5s; /* Firefox */-moz-animation-iteration-count: infinite; /* 一直重复动画 */-webkit-animation: zoom 5s;  /* Safari 和 Chrome */-webkit-animation-iteration-count: infinite; /* 一直重复动画 */-o-animation: zoom 5s; /* Opera */-o-animation-iteration-count: infinite; /* 一直重复动画 */
}
</style>

为image添加id:

<div id="testpng"><img id="taiyang" src="../testdata/1.png" alt="示例锚点"/></div>

3、通过Feature + style方式添加

// 我们需要一个vector的layer来放置图标
var layer = new ol.layer.Vector({source: new ol.source.Vector()
})var url = 'https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}';var map = new ol.Map({// 设置地图图层layers: [new ol.layer.Tile({ source: new ol.source.XYZ({ url: url }) }),layer    ],// 设置显示地图的视图view: new ol.View({center: [117.23, 36.43],zoom: 10,projection: 'EPSG:4326'//设置坐标系,地图本身3857坐标系,即横轴墨卡托投影,因为中心点用的度,所以设置成wgs84代号是4326}),// 让id为map的div作为地图的容器target: 'mapCon',
});// 创建一个Feature,并设置好在地图上的位置
var anchor = new ol.Feature({geometry: new ol.geom.Point([117.5, 36.8])
});
// 设置样式,在样式中就可以设置图标
anchor.setStyle(new ol.style.Style({image: new ol.style.Icon({src: '../testdata/1.png'})
}));
// 添加到之前的创建的layer中去
layer.getSource().addFeature(anchor);

 

效果与1一样,但实现代码不一样:
overlay需要HTML元素img,但这种方式不需要;
overlay是添加在map上的,但是这种方式需要一个Vector的layer,并添加在其上,没有办法像overlay那样使用一些HTML技术。

根据层级放大缩小图标:

// 监听地图层级变化
map.getView().on('change:resolution', function(){var style = anchor.getStyle();// 重新设置图标的缩放率,基于层级10来做缩放style.getImage().setScale(this.getZoom() / 10);anchor.setStyle(style);
})

 设置字体格式:

// 设置文字style
anchor.setStyle(new ol.style.Style({text: new ol.style.Text({// font: '10px sans-serif' 默认这个字体,可以修改成其他的,格式和css的字体设置一样text: '学习cesium',fill: new ol.style.Fill({color: 'red'})})
}));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/309699.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阶段性复习(三)

if后面是赋值符&#xff0c;所以最后的值是a for&#xff08;&#xff1b; &#xff1b;&#xff09;是死循环 大小写转换 在这道题中&#xff0c;通过分析可知&#xff0c;在小写转换大写的过程中&#xff0c;需要满足的条件是word0&#xff0c;同时是小写&#xff0c;而在第…

基于中微89F2265B的200w智能电饭煲

大三暑假的时候&#xff0c;小组三人从零设计了一个智能电饭煲项目 文章目录 一、主要功能二、硬件设计2.1 控制板2.2 电源板 三、软件设计3.1 总体框架3.2 功能细化3.2.1 开机3.2.2 各按键功能3.2.3 电饭煲定时与预约功能3.2.4 电饭煲加热功能3.2.5 其他说明 3.3 主流程图3.4 …

SQL server Profiler的使用

在SQL server management studio 中 的工具下 选择SQL server Profiler 对sql进行过滤

{MySQL}索引事务和JDBC

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、索引1.1索引是什么1.2作用1.3代码 二、事务2.1什么是事务2.2使用 三.JDBC总结 前言 接着上次&#xff0c;继续讲下MySQL 提示&#xff1a;以下是本篇文章正…

往期精彩推荐

所有的内容都在这个博客中&#xff0c;此博客为推广导航博客&#xff0c;过后会删掉https://blog.csdn.net/weixin_41620184/article/details/135042416 往期精彩&#xff1a;快来学习吧~~~ 机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归PySpark大数据…

销售转行上位机编程:我的学习与职业经历分享

同学们好&#xff0c;我是杨工&#xff0c;原先是一名销售。 通过在华山编程培训中心学习&#xff0c;成功转行上位机编程&#xff0c;对此我想分享学习和职业经历。 在职业生涯的早期&#xff0c;我并没有考虑将技术融入到我的工作中。然而&#xff0c;在几次创业的失败后&a…

二分查找(非朴素)--在排序数组中查找元素的第一个和最后一个位置

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 本题链接 输入描述 输出描述 算法分析 1.算法一&#xff1a;暴力求解 2.算法二&#xff1a;朴素二分算法 3.算法三&#xff1a;二分查找左右端点 3.1查找左端点 3.1.1细节一&#xff1a;循环条件 3.1.2细节二…

亚信安慧AntDB数据库引领数字时代通信创新

在数字经济与实体经济深度融合的时代&#xff0c;通信行业正迎来前所未有的新机遇。特别是在中国信通院的预测中&#xff0c;2027年5G专网市场规模预计将达到802亿元&#xff0c;呈现出显著的增长态势&#xff0c;年复合增长率高达42%。 亚信安慧AntDB数据库一直致力于紧跟科技…

K8s部署Minio使用NFS持久化存储

一、介绍 Minio是一款高性能的对象存储服务器&#xff0c;它兼容Amazon S3 API。它的设计目的是为了提供云存储服务的性能和可扩展性&#xff0c;同时还保持着本地存储的简单性和易用性。Minio可以在Linux、MacOS和Windows等操作系统上运行&#xff0c;它可以通过命令行界面或R…

车牌识别技术,如何用python识别车牌号

目录 一.前言 二.运行环境 三.代码 四.识别效果 五.参考 一.前言 车牌识别技术&#xff08;License Plate Recognition, LPR&#xff09;在交通计算机视觉&#xff08;Computer Vision, CV&#xff09;领域具有非常重要的研究意义。以下是该技术的一些扩展说明&#xff1…

FL Studio 21.2.2官方中文版重磅发布

纯正简体中文支持&#xff0c;更快捷的音频剪辑及素材管理器&#xff0c;多样主题随心换&#xff01; Mac版新增对苹果M2/1家族芯片原生支持。 丰富的主题换肤 现在大家可以通过控制色调、饱和度、亮度、文本、仪表和步进序列器的颜色来改变你的DAW外观&#xff0c; DAW“情绪…

Vue中的默认插槽详解

Vue中的默认插槽详解 在 Vue 中&#xff0c;插槽&#xff08;Slot&#xff09;是一种非常强大且灵活的机制&#xff0c;用于在组件中插入内容。Vue 提供了两种类型的插槽&#xff1a;默认插槽&#xff08;Default Slot&#xff09;和具名插槽&#xff08;Named Slot&#xff09…