leaflet 绘制 带箭头的线
箭头不是画的线段,是贴的图标,再按方向旋转一下。
代码:

//添加箭头线
function addLineDirection(polylinePointArr, source, target) {
var lineDirection = {}; var polyline1 = L.polyline(polylinePointArr, { stroke: true, color: "#009922", opacity: 0.3, weight: 14, pane: drawPaneBelow });
vectorsLayer.addLayer(polyline1);
lineDirection.polyline1 = polyline1;
var polyline2 = L.polyline(polylinePointArr, { stroke: true, color: "#009922", weight: 8, opacity: 0.6, pane: drawPaneBelow });
vectorsLayer.addLayer(polyline2);
lineDirection.polyline2 = polyline2; var distanceSum = 0;
var count = 0;
for (var i = 0; i < polylinePointArr.length - 1; i++) {
point1 = polylinePointArr[i];
point2 = polylinePointArr[i + 1];
var angle = calcLineAngle(point1, point2); var distance = Math.pow(Math.pow(point2[1] - point1[1], 2) + Math.pow(point2[0] - point1[0], 2), 0.5);
distanceSum += distance;
var arrowCount = Math.floor(distanceSum / 0.01) - count;
count += arrowCount; for (var j = 1; j <= arrowCount; j++) {
var lng = point1[1] + (point2[1] - point1[1]) * ((j - 0.2) / arrowCount);
var lat = point1[0] + (point2[0] - point1[0]) * ((j - 0.2) / arrowCount); var width = 14;
var height = 14;
var html = '<img src="data:images/arrow.png" style="width:' + width + 'px; height:' + width + 'px; transform:rotate(' + angle + 'deg) scale(0.6); " />'; var icon = L.divIcon({
html: html,
className: 'draw-vectors-label',
iconSize: [width, height],
iconAnchor: [width / 2.0, height / 2.0]
}); lineDirection.marker = addMarker(icon, lng, lat);
lineDirection.source = source;
lineDirection.target = target;
lineDirectionArr.push(lineDirection);
}
} } //计算箭头图标角度
function calcLineAngle(point1, point2) {
var h = point2[0] - point1[0];
var w = point2[1] - point1[1]; var angle = Math.atan(Math.abs(h) / Math.abs(w)) * 180 / Math.PI;
if (w == 0) {
if (h > 0) {
return -90;
}
if (h < 0) {
return 90;
}
}
if (h == 0) {
if (w > 0) {
return 0;
}
if (w < 0) {
return 180;
}
}
if (h > 0) {
if (w > 0) {
return 0 - angle;
}
if (w < 0) {
return angle - 180;
}
}
if (h < 0) {
if (w > 0) {
return angle;
}
if (w < 0) {
return 180 - angle;
}
} return 0;
}
addMarker方法:

//添加div marker
function addMarker(icon, lng, lat) {
var latlng = new L.LatLng(lat, lng);
var marker = new L.Marker(latlng, { icon: icon, pane: drawPane });
vectorsLayer.addLayer(marker);
return marker;
}
效果图:


leaflet 绘制 带箭头的线的更多相关文章
- OpenLayer——绘制带箭头的线
绘制带箭头的线,计算相对复杂,多少是有点影响性能了.更简单的做法:初始.目标点用不同的点进行强调即可. <!DOCTYPE html> <html lang="en&quo ...
- AE常用代码(标注要素、AE中画带箭头的线、如何获得投影坐标、参考坐标、投影方式、FeatureCount注意事项)
手上的电脑已经用了将近三年了,想入手一台Surface Pro,所以计划着把电脑上的资料整理下,部分资料打算发到博客上来,资料有同事.也有自己的.也有来自网络的,来源途径太多,也没法详细注明,请见谅! ...
- 如何在 Matlab 中绘制带箭头的坐标系
如何在 Matlab 中绘制带箭头的坐标系 如何在 Matlab 中绘制带箭头的坐标系 实现原理 演示效果 完整代码 实现原理 使用 matlab 的绘制函数时,默认设置为一个方框形的坐标系, 图1 ...
- 如何利用百度地图JSAPI画带箭头的线?
百度地图JSAPI提供两种绘制多折线的方式,一种是已知多折线经纬度坐标串通过AddOverlay接口进行添加:另一种是通过在地图上鼠标单击进行绘制(鼠标绘制工具条库).目前这两种方式只能绘制多折线,并 ...
- Leaflet 带箭头轨迹以及沿轨迹带方向的动态marker
前面写了篇文章,mapboxgl实现带箭头轨迹线,介绍了如何基于mapboxgl实现类似高德地图导航轨迹效果. 下图是我基于leaflet实现的效果. 接下来分享一下在我基于leaflet实现该效果时 ...
- Turtle绘制带颜色和字体的图形(Python3)
转载自https://blog.csdn.net/wumenglu1018/article/details/78184930 在Python中有很多编写图形程序的方法,一个简单的启动图形化程序设计的方 ...
- iOS重写drawRect方法实现带箭头的View
创建一个UIView的子类,重写drawRect方法可以实现不规则形状的View,这里提供一个带箭头View的实现代码: ArrowView.h #import <UIKit/UIKit.h&g ...
- css实现带箭头选项卡
这阵子在做一个web端项目中遇到一个问题,需要实现带箭头的选项卡点击可切换.起初没想太多,直接切一个向上的小箭头图片,外层div设置相同颜色的边框,再用相对定位和绝对定位.这种方法是可行的,但是因为手 ...
- 百度地图API绘制带头箭头的折线
源代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" co ...
- 纯Css绘制三角形箭头三种方法
在制作网页的过程中少不了绘制类似图片的三角形箭头效果,虽然工程量不大,但是确实麻烦.在学习的过程中,总结了以下三种方法,以及相关的例子. 一.三种绘制三角形箭头方法 1.方法一:利用overflow: ...
随机推荐
- 【外包杯】【无语的报错】意想不到的逗号Unexpected comma.(已解决)
解决了,答案是没保存,看见那些文件是型号了吗,就是这个原因.
- 数据仓库主流开发语言——SQL
数仓开发语言概述 SQL语言介绍 数仓与SQL 结构化数据 二维表结构 SQL语法分类
- DataGrip给DateTime类型字段赋值当前系统默认时间
CURRENT_TIMESTAMP alter table 表名 modify column update_time DATETIME NULL DEFAULT CURRENT_TIMESTAMP O ...
- VSCode个性化的配置
1.下载插件 Eclipse快捷键(我以前用Eclipse习惯了,大家不需要) Premitter Vetur koroFileHeader 2.修改VSCode设置 3.粘贴下面的代码 { &quo ...
- JXNU acm选拔赛 不安全字符串
不安全字符串 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submis ...
- 数字孪生融合GIS系统能够为物流行业提供什么解决方案?
全球贸易和电子商务的不断发展,让物流行业面临着越来越多的挑战.其中,提高运输效率.降低成本.优化供应链和增强可持续性等问题成为业界关注的焦点.在这个数字化时代,数字孪生和GIS系统的融合为物流行业带来 ...
- 袋鼠云数栈前端从 Multirepo 到 Monorepo 研发效率提升探索之路
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:星野 困境频生前端代码管理何解? 前端代码管理一直是困扰着 ...
- C# 输出的格式转换,占位/补位,字符串拼接、字符串内插法
// "0"描述:占位符,如果可能,填充位 Console.WriteLine(string.Format("{0:000000}", 12 ...
- springboot产生非法状态异常+空指针
springboot产生非法状态异常+空指针 描述:异常描述为在响应提交后不能执行senderror方法 解决方案: 不是,哥们,你不会真觉得有什么合适的解决方案吧,网上几波前辈大佬各说各的,和我的情 ...
- 从零玩转设计模式之简单工厂设计模式-jiandangonchangmoshi
title: 从零玩转设计模式之简单工厂设计模式 date: 2022-12-08 11:31:19.472 updated: 2022-12-11 23:03:34.805 url: https:/ ...