openlayers 使用canvas绘制圆形头像图标
记录一个使用canvas 将一张图片等比缩放,裁剪为一个圆
1、原始图片

2、绘制后在地图中呈现的样式

3、设置样式的函数
/**
* 设置Style
*/
setStyleOnPersonLocation (feature) {
const data = feature.values_
var imgUrl = 'https://person_head_img/avatar.jpg' // 绘制圆角矩形
let canvas = document.createElement('canvas')
canvas.width = 80
canvas.height = 80
var context = canvas.getContext('2d')
var img = new Image()
img.src = imgUrl // 原始图片
let w = canvas.width
let h = canvas.height
img.onload = function () {
context.save()
// context.arc(x,y,r,sAngle,eAngle,counterclockwise);
context.arc(40, 40, 20, 0, 2 * Math.PI) // 从画布上裁剪出这个圆形
context.clip()
// context.drawImage(img,x,y,width,height);
context.drawImage(img, 20, 20, 40, 40)
} // 设置style
return new Style({
image: new Icon({
crossOrigin: 'anonymous',
img: canvas,
imgSize: [w, h]
}),
text: new Text({
text: data.name,
offsetY: -26,
scale: 0.6,
font: '12px Microsoft YaHei',
fill: new Fill({
color: '#808080'
}),
stroke: new Stroke({
color: '#333',
width: 1
})
})
})
},
4、绘制
上面样式设置的函数写好后,这里就可以开始实例化vector , 将其添加到地图中去了
import {Vector as VectorLayer} from 'ol/layer'
import GeoJSON from 'ol/format/GeoJSON'
import VectorSource from 'ol/source/Vector'
import {Point} from 'ol/geom'
import {boundingExtent, getCenter} from 'ol/extent'
import {Style, Icon, Stroke, Text, Fill} from 'ol/style'
methods:{
addlayerToMap(){
const geologyData = {
type: 'FeatureCollection',
crs: {
type: 'Feature'
},
features: [
type: 'Feature',
properties: 'extraData',
id:'userId',
geometry: {
type: 'Point',
coordinates: [104.050629,30.65769]
}
]
}
let nomalSource = new VectorSource({
features: (new GeoJSON()).readFeatures(geologyData)
})
this.shareLocationLayer = new VectorLayer({
source: nomalSource,
// style: _this.setStyleOnPersonLocation // 不能在此设置style 否则地图移动会持续触发重绘
})
this.map.addLayer(this.shareLocationLayer)
this.shareLocationLayer.getSource().forEachFeature(featureObj => {
featureObj.setStyle(_this.setStyleOnPersonLocation(featureObj))
})
}
}
记录记录便于查阅
openlayers 使用canvas绘制圆形头像图标的更多相关文章
- 使用html5 canvas绘制圆形或弧线
注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...
- canvas绘制圆形进度条(或显示当前已浏览网页百分比)
使用canvas绘制圆形进度条,或者是网页加载进度条 或者是显示你浏览了本网页多少-- 由于个浏览器的计算差异,打开浏览器时 初始值有所不同,但是当拉倒网页底部时,均显示100%. 兼容性:测试浏览器 ...
- html5 canvas绘制圆形印章,以及与页面交互
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- canvas绘制圆角头像
如果你想绘制的网页包含一个圆弧形的头像的canvas图片,但是头像本身是正方形的,需要的方法如下:首先, 拿到头像在画布上的坐标和宽高:(具体怎么获取不在此做具体介绍) 使用canvas绘制圆弧动画 ...
- 教你制作挂件头像 | 小程序七十二变之 canvas 绘制国旗头像
昨天朋友圈被「请给我一面国旗@微信官方」刷屏,虽然知道是假的,但是从另一个角度来看,弄清楚如何实现更有趣. 1.canvas 这就不得不提到小程序中的 API canvas,H5 中也是有 canva ...
- canvas 绘制圆形进度条
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- android自定义View绘制圆形头像与椭圆头像
要实现这两种效果,需要自定义View,并且有两种实现方式. 第一种: public class BitmapShaders extends View { private BitmapSh ...
- h5学习-canvas绘制矩形、圆形、文字、动画
绘制矩形<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 微信小程序之canvas绘制海报分享到朋友圈
绘制canvas内容 首先,需要写一个canvas标签,给canvas-id命名为shareBox <canvas canvas-id="shareBox"></ ...
- canvas绘制简单图形
canvas绘图篇: canvas绘制矩形: <!DOCTYPE html> <html> <head lang="en"> <meta ...
随机推荐
- Javaweb基础复习------Cookie+Session案例的实现(登录注册案例)
Cookie对象的创建--Cookie cookie=new Cookie("key","value"); 发送Cookie:resp.addCookie(); ...
- RBAC学习(一)
0.前提 :用户只有一个直属部门,但角色可以关联多个部门 有一种情况就不太适用:比如说地区经理是一个角色,张三是北京市地区经理,他在组织架构中的直属部门是华北大区,然后一个黑龙江的销售李四提一个折扣申 ...
- maui BlazorWebView+本地html (vue、uniapp等都可以) 接入支付宝sdk 进行支付宝支付 开发 Android app
首先添加支付宝sdk的绑定库 nuget 包:Chi.MauiBinding.Android.AliPay 项目地址:https://github.com/realZhangChi/MauiBindi ...
- 可靠消息最终一致性【本地消息表、RocketMQ 事务消息方案】
更多内容,前往IT-BLOG 一.可靠消息最终一致性事务概述 可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能够接收消息并处理事务成功,此方案强调 ...
- C#中抽象方法与虚方法的区别详解及示例
1. 抽象方法与虚方法的区别 先说两者最大的区别:抽象方法是需要子类去实现的.虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求.因为抽象类无法实例化,所以抽象方法没有办法被调用,也就 ...
- Teamcenter_SOA开发:使用SOA登录Teamcenter
本文Teamcenter SOA使用C++参考SOA的例子进行编写,以下代码为登录Teamcenter,代码工程在Teamcenter四层环境下运行. SOA的库文件.样例文件.帮助文件在Teamce ...
- flask-sqlalchemy入门
Flask-SQLAlchemy 是一个为 Flask 应用增加 SQLAlchemy 支持的扩展.它致力于简化在 Flask 中 SQLAlchemy 的使用.SQLAlchemy 是目前pytho ...
- window启动和停止服务命令
NET STOP serviceNET STOP 用于终止 Windows 服务.终止一个服务可以取消这个服务正在使用的任何一个网络连接.同样的一些服务是依赖于另外一些服务的.终止一个服务就会终止其它 ...
- 访问不到tomcat下的静态资源文件
问题:idea+tomcat 测试Servlet,居然访问不到与WEB-INF同级的静态资源1.html.又不是访问WEB-INF里的文件.... 分析:可能是开发目录中的文件没有自动复制到部署目录. ...
- JQuery点击复制文本框内容的方法插件
[导读] 文章介绍了两种常用的点击复制文本框内容方法,一种是but IE only,同样的这个也是我们经常使用的.优点是体积小,仅有十来行代码,但缺点也很明显,只支持IE及以IE为内核的浏览器,另一种 ...