箭头不是画的线段,是贴的图标,再按方向旋转一下。

代码:

//添加箭头线
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 绘制 带箭头的线的更多相关文章

  1. OpenLayer——绘制带箭头的线

    绘制带箭头的线,计算相对复杂,多少是有点影响性能了.更简单的做法:初始.目标点用不同的点进行强调即可. <!DOCTYPE html> <html lang="en&quo ...

  2. AE常用代码(标注要素、AE中画带箭头的线、如何获得投影坐标、参考坐标、投影方式、FeatureCount注意事项)

    手上的电脑已经用了将近三年了,想入手一台Surface Pro,所以计划着把电脑上的资料整理下,部分资料打算发到博客上来,资料有同事.也有自己的.也有来自网络的,来源途径太多,也没法详细注明,请见谅! ...

  3. 如何在 Matlab 中绘制带箭头的坐标系

    如何在 Matlab 中绘制带箭头的坐标系 如何在 Matlab 中绘制带箭头的坐标系 实现原理 演示效果 完整代码 实现原理 使用 matlab 的绘制函数时,默认设置为一个方框形的坐标系, 图1 ...

  4. 如何利用百度地图JSAPI画带箭头的线?

    百度地图JSAPI提供两种绘制多折线的方式,一种是已知多折线经纬度坐标串通过AddOverlay接口进行添加:另一种是通过在地图上鼠标单击进行绘制(鼠标绘制工具条库).目前这两种方式只能绘制多折线,并 ...

  5. Leaflet 带箭头轨迹以及沿轨迹带方向的动态marker

    前面写了篇文章,mapboxgl实现带箭头轨迹线,介绍了如何基于mapboxgl实现类似高德地图导航轨迹效果. 下图是我基于leaflet实现的效果. 接下来分享一下在我基于leaflet实现该效果时 ...

  6. Turtle绘制带颜色和字体的图形(Python3)

    转载自https://blog.csdn.net/wumenglu1018/article/details/78184930 在Python中有很多编写图形程序的方法,一个简单的启动图形化程序设计的方 ...

  7. iOS重写drawRect方法实现带箭头的View

    创建一个UIView的子类,重写drawRect方法可以实现不规则形状的View,这里提供一个带箭头View的实现代码: ArrowView.h #import <UIKit/UIKit.h&g ...

  8. css实现带箭头选项卡

    这阵子在做一个web端项目中遇到一个问题,需要实现带箭头的选项卡点击可切换.起初没想太多,直接切一个向上的小箭头图片,外层div设置相同颜色的边框,再用相对定位和绝对定位.这种方法是可行的,但是因为手 ...

  9. 百度地图API绘制带头箭头的折线

    源代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" co ...

  10. 纯Css绘制三角形箭头三种方法

    在制作网页的过程中少不了绘制类似图片的三角形箭头效果,虽然工程量不大,但是确实麻烦.在学习的过程中,总结了以下三种方法,以及相关的例子. 一.三种绘制三角形箭头方法 1.方法一:利用overflow: ...

随机推荐

  1. MCU看门狗使用注意事项

    前言 最近因为项目产品硬件设计有问题,导致设计的一款产品把硬件电源开关以及硬件系统复位功能去掉了.更严重的是,这产品已经开始生产了,硬件已经无法修改,所以软件必须上看门狗,否则设备死机或是异常后就只能 ...

  2. Mongoose查增改删

    在src目录下新建一个文件夹models,用来存放数据模型和操作数据库的方法. 在models目录下新建一个文件user.js,用来管理用户信息相关的数据库操作. 相关的数据模型和数据库操作方法,最后 ...

  3. SpringCore完整学习教程5,入门级别

    本章从第6章开始 6. JSON Spring Boot提供了三个JSON映射库的集成: Gson Jackson JSON-B Jackson是首选的和默认的库. 6.1. Jackson 为Jac ...

  4. RDBMS与Hbase对比 HDFS与HBase对比 Hive与HBase对比

    RDBMS: HBASE: HDFS与HBase对比: Hive与HBase对比: Hive与HBase总结

  5. Java8新特性之FlatMap&Reduce

    1.FlagMap // flatMap:接收一个T返回一个R,将一个元素转为一个新的流 ;R apply(T t); <R> Stream<R> flatMap(Functi ...

  6. Codeforces #449 div2 C题

    C. Nephren gives a riddle time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  7. Wifi BSSID获取

    代码很简单,通过wifiManager 获取wifiinfo,从而获取bssid, public static String getWifiSSID(Context context) { String ...

  8. OpenGL纹理转换谜团:纹理写入FRAMEBUFFER后的镜像现象

    在OpenGL中,最近将一个 GL_TEXTURE_2D 纹理写入到 GL_FRAMEBUFFER ,然后从GL_FRAMEBUFFER读取为GL_TEXTURE_2D纹理后,发现GL_TEXTURE ...

  9. Pikachu漏洞靶场 File Inclusion(文件包含漏洞)

    File Inclusion(文件包含漏洞) 本地文件包含 url: 192.168.171.30/pikachu/vul/fileinclude/fi_local.php?filename=file ...

  10. Java 并发编程(三)锁与 AQS

    本文 JDK 对应的版本为 JDK 13 由于传统的 synchronized 关键字提供的内置锁存在的一些缺点,自 JDK 1.5 开始提供了 Lock 接口来提供内置锁不具备的功能.显式锁的出现不 ...