15.坐标添加带箭头的线

news2024/11/19 20:19:48

ol的官网示例中有绘制带箭头的线的demo,那个是交互式绘制,而不是根据经纬度坐标添加,在其基础上稍作修改,即可转为通过经纬度添加带箭头的线的功能,线和箭头的粗细大小样式都可以自定义
效果如图

代码如下

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>加载天地图</title>
  <link href="ol/ol.css" rel="stylesheet" type="text/css" />
  <script src="ol/ol.js" type="text/javascript"></script>
  <style type="text/css">
    #mapCon {
      width: 100%;
      height: 100%;
    }
  </style>
</head>
<body>
<!-- 地图容器 -->
<div id="mapCon"></div>

<script type="text/javascript">
  var key = "4689fc6b9bc0fdc8c48298f751ebfb41";//天地图密钥

  //ol.layer.Tile:是一个瓦片图层类,用于显示瓦片资源。
  //source是必填项,用于为图层设置来源。

  //ol.source.XYZ:
  //创建天地图矢量图层
  var TiandiMap_vec = new ol.layer.Tile({
    title: "天地图矢量图层",
    source: new ol.source.XYZ({
      url: "http://t{0-7}.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=" + key,
      wrapX: false
    })
  });
  //创建天地图矢量注记图层
  var TiandiMap_cva = new ol.layer.Tile({
    title: "天地图矢量注记图层",
    source: new ol.source.XYZ({
      url: "http://t{0-7}.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=" + key,
    })
  });
  //实例化Map对象加载地图
  var map = new ol.Map({
    //地图容器div的ID
    target: 'mapCon',
    //地图容器中加载的图层
    layers: [TiandiMap_vec, TiandiMap_cva],
    //地图视图设置
    view: new ol.View({
      //地图初始中心点(经纬度)
      center: [118.2, 36.5],
      //地图初始显示级别
      zoom: 7,
      projection: "EPSG:4326"
    })
  });
  //如果想画画,首先需要有一张纸或者画布,地图则需要一个绘制层
  //创建一个矢量图层Vector 作为绘制层,ol.source.Vector是用来设置矢量图层数据来源的
  var source = new ol.source.Vector();
  //创建一个图层 ol.layer.Vector矢量图层类
  var vector = new ol.layer.Vector({
    source: source
  });
  //将绘制层添加到地图容器中
  map.addLayer(vector);
  let startPoint = [116.25,38.17];
  let endPoint = [113.56, 35.11];
  let line = createLine(startPoint,endPoint,'#1196db');
  let point = createArrow(startPoint,endPoint,'blue');

  //将创建的 元素 添加到图层
  source.addFeature(line);
  source.addFeature(point);

  /**
   * 创建线
   * @param start 起点坐标 [经度,纬度]
   * @param end 终点坐标 [经度,纬度]
   */
  function createLine(start,end,lineColor){
    //添加线
    //创建一个线
    let Line = new ol.Feature({
      geometry: new ol.geom.LineString([start, end])
    });

    //设置线的样式
    Line.setStyle(new ol.style.Style({
      //填充色
      fill: new ol.style.Fill({
        color: 'rgba(74, 143, 255, 0.2)'
      }),
      //边线颜色
      stroke: new ol.style.Stroke({
        color: lineColor,
        width: 5
      }),
      //形状
      image: new ol.style.Circle({
        radius: 7,
        fill: new ol.style.Fill({
          color: lineColor
        })
      })
    }));
    return Line;
  }
  /**
   * 创建一个箭头样式的点
   * @param start 箭头线的起点
   * @param end 箭头线的终点
   * @param color 箭头颜色(red,blue)
   * @returns {*}
   */
  function createArrow(start,end,color){
    let iconUrl = 'static/img/arrow_vector_blue.svg';
    if (color=='red'){
        iconUrl = 'static/img/arrow_vector_red.svg';
    }
    //根据起止点,计算箭头的方向
    let dx = end[0] - start[0];
    let dy = end[1] - start[1];
    let rotation = Math.atan2(dy, dx);
    //添加点
    let point = new ol.Feature({
      geometry: new ol.geom.Point(end)
    });
    //设置点1的样式信息(Feature对象 只能 通过setStyle方法设置style属性)
    point.setStyle(new ol.style.Style({
      //形状
      image: new ol.style.Icon({
        src: iconUrl,
        //anchor: [0.75, 0.5],//图标的锚点,经纬度点所对应的图标的位置,默认是[0.5, 0.5],即为标注图标的中心点位置
        scale:2,//用于调整缩放比例,可以设置该比例实现,图标跟随地图层级缩放
        rotateWithView: false,//是否随着视图旋转图标
        rotation: -rotation//旋转方位
      })
    }));
    return point;
  }

</script>
</body>
</html>

源码请查看往期文章

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【工程实践】使用git clone 批量下载huggingface模型文件

前言 经常需要下载模型到服务器&#xff0c;使用git clone方法可以快速实现模型下载。 1.选定要下载的模型 以下载moka-ai/m3e-base为例&#xff0c;切换到Files and versions。 2.更改下载网页的url 如上图所示&#xff0c;当前要下载模型网页的url为&#xff1a; https://hu…

【C++初阶】反向迭代器的实现

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

【高阶产品策略】策略价值量化之数据指标

文章目录 1、数据指标概述2、通用指标3、WEB端常用指标4、移动端常用指标5、如何选择一个合适的数据指标 1、数据指标概述 2、通用指标 3、WEB端常用指标 4、移动端常用指标 5、如何选择一个合适的数据指标

无涯教程-Android - Style Demo Example函数

下面的示例演示如何将样式用于单个元素。让我们开始按照以下步骤创建一个简单的Android应用程序- 步骤说明 1 您将使用Android Studio IDE创建一个Android应用程序,并在 com.example.saira_000.myapplication 包下将其命名为 myapplication ,如中所述您好世界Example一章。 2 …

《高效职业人》考试试题及答案截图

中电金信新员工入职培训选修课《高效职业人》考试答案截图

稳恒电路直观理解

图v0 图v1 图v2 图v3 图v4 自由正电荷s&#xff0c;定向移动过程中&#xff0c;在任何一位置处受力都是平衡的&#xff0c;即s所受总合力为0&#xff0c; 即s处于匀速运动&#xff1a;直导体中匀速直线运动、拐弯处匀速圆周运动 起初t0时刻, s的势能是最高的E0&#xff0c;之…

出口管制升级!限制英伟达向中东地区出口AI芯片 | 百能云芯

8月31日消息&#xff0c;根据1份监管报告显示&#xff0c;原先美国限制英伟达先进人工智能芯片出口至中国&#xff0c;现在拟计划进一步扩大到中国以外的其他地区&#xff0c;包括中东一些国家。 据《路透》报道&#xff0c;美国通常是出于国家安全原因&#xff0c;实施出口管制…

头歌MYSQL——课后作业6 函数

第1关&#xff1a;数值函数 任务描述 本关任务&#xff1a;对表达式取整 相关知识 四舍五入的函数 ROUND(X,D) 返回X&#xff0c;其值保留到小数点后D位&#xff0c;而第D位的保留方式为四舍五入。 若D的值为0,则对小数部分四舍五入。 若将D设为负值&#xff0c;保留X值小数…

Threejs里执行对象的多个动画

承接上文&#xff0c;本文讲述如何在Threejs里播放对象的多个动画&#xff0c;这也是研究了很久才解决的… 一 导出模型 在Blender里按照File->Export&#xff0c;选择glTF2.0 然后在弹框的右上角选择导出为glTF Embedded (.gltf) 这样就把模型导出来了&#xff0c;该模…

Revit SDK:Selections 选择

前言 Revit 作为一款成熟的商业软件&#xff0c;它将自己的UI选择功能也通过 API 暴露出来。通过 API 可以按照特定的过滤规则来选择相应的元素&#xff0c;能力和UI基本上是等价的。这个 SDK 用四个例子展示了 API 的能力&#xff0c;内容如下。 内容 PickforDeletion 核心…

RabbitMQ快速上手及讲解

前言&#xff1a;在介绍RabbitMQ之前&#xff0c;我们先来看下面一个场景&#xff1a; 1.1.1.1 异步处理 场景说明&#xff1a; 用户注册后&#xff0c;需要发注册邮件和注册短信&#xff0c;传统的做法有两种 1.串行的方式 (1)串行方式&#xff1a;将注册信息写入数据库后&a…

数据是如何存储在内存中的?听我慢慢道来

数据的存储 1. 前言2. 数据类型2.1 整形家族2.2 浮点数家族2.3 构造类型&#xff08;自定义类型&#xff09;2.4 指针类型2.5 空类型&#xff08;无类型&#xff09; 3. 整数在内存中的存储4. 大小端5. 浮点数在内存中的存储 1. 前言 大家好&#xff0c;我是努力学习游泳的鱼。…

2023年高压快充行业研究报告

第一章 行业概况 1.1 行业定义 高压快充行业是指专注于为电动汽车、移动设备等提供高功率、高效率充电服务的行业。高压快充技术旨在通过采用更高的电压和更大的电流&#xff0c;缩短充电时间并提高充电效率。这种技术可以使电动汽车在短时间内充满电&#xff0c;从而提高其可…

JavaScript基础语法02——JS书写位置

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 今天继续学习JavaScript基础语法&#xff0c;JS的书写位置&#xff0c;俗话说&#xff1a;好记性不如烂笔头&#xff0c;边学边记&#xff0c;方便回顾。 1、行内JavaScript 代码写在标签内部 示例&#xff1a; <…

dubbo项目traceId链路传递(MDC方案及重复traceId处理)

1.traceId用途 主要用于项目dubbo接口调用链日志追踪使用&#xff0c;可以获取完整的链路日志&#xff0c;协助排查问题。 2.traceId传递及代码实现 本方案是基于 org.slf4j.MDC 进行实现&#xff0c;会出现线程池中线程复用导致traceId重复问题&#xff0c;后面会说解决方案。…

unity 发布apk,在应用内下载安装apk(用于更大大版本)

*注意事项&#xff1a; 1&#xff0c;andriod 7.0 和 android 8.0是安卓系统的分水岭&#xff0c;需要分开来去实现相关内容2&#xff0c;注意自己的包名&#xff0c;在设置一些共享文件的时候需要放自己的包名3,以下是直接用arr包放入unity中直接使用的&#xff0c;不需要导入…

QTday2(信号与槽机制——很重要!!!)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.信号与槽 class Widget : public QWidget {Q_OBJECT //信号与槽的元对象signals:void my_signal(); //自定义信号函数public slots:void my_slot(); //自定义的槽函数public:Widget(Q…

码云使用记录

码云使用记录 主要步骤 1、https://gitee.com 注册 2、下载Git 3、配置SSH 4、创建远程仓库 5、切到本地项目目录下将本地项目推到远程 前两步根据提示进行即可&#xff0c;下面从第三步开始讲解 3、配置SSH&#xff08;用于提交代码和更新代码&#xff09; https://gitee.…

IDEA全局统一设置Maven

原来每次打开新建的项目都需要经过 File-> Settings 重新配置maven&#xff0c;这样很不爽 然而经过 File-> New Projects Setup -> Settings for New Projects 后&#xff0c;再如上图配置后就全局设置好了