openlayers-15-坐标添加带箭头的线

news2024/11/18 19:28:37

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/962415.html

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

相关文章

Mybatis 动态SQL – 使用if, where标签动态生成条件语句

前面几篇我们介绍了使用Mybatis进行数据的增删改查&#xff0c;并且也了解了如何在Mybatis中使用JDK的日志系统打印日志&#xff1b;本篇我们继续介绍如何使用Mybatis提供的if,where标签动态生成条件语句。 如果您对数据的增删改查和Mybatis集成JDK日志系统不太了解&#xff0…

iOS开发Swift-7-得分,问题序号,约束对象,提示框,类方法与静态方法-趣味问答App

1.根据用户回答计算得分 ViewController.swift: import UIKitclass ViewController: UIViewController {var questionIndex 0var score 0IBOutlet weak var questionLabel: UILabel!IBOutlet weak var scoreLabel: UILabel!override func viewDidLoad() {super.viewDidLoad()…

QGIS合并矢量图层后layer属性显示不全 | QGIS踩坑实录

省流 QGIS【合并矢量图层】&#xff0c;自动生成layer字段时&#xff0c;遇到图层名中的“.”等不支持的字符会自动截断 问题描述 使用QGIS的【合并矢量图层】功能时&#xff0c;在合并结果中&#xff0c;QGIS会自动添加一个layer字段&#xff0c;用来记录当前数据是来自合并…

CPSC上月召回案例涉及多款常见产品有哪些?

CPSC上月召回案例涉及多款常见产品有哪些&#xff1f; ​每年的夏末秋初为美国产品热销节日&#xff08;感恩节、万圣节、黑五&#xff09;的备货期&#xff0c;卖家在大量备货的同时&#xff0c;务必保障自身产品通过相关安全测试&#xff0c;以免造成不必要的损失&#xff0…

字节美团题库之重排链表

文章目录 题目详情题目分析完整实现Java代码总结 题目详情 注&#xff1a;面试真实遇到&#xff0c;对于面试遇到算法时要冷静分析 LCR 026 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为&am…

ChatGPT数据分析及作图插件推荐-Code Interpreter

今天打开chatGPT时发现一个重磅更新&#xff01;code interpreter插件可以使用了。 去查看openai官网&#xff0c;发现从2023.7.6号&#xff08;前天&#xff09;开始&#xff0c;code interpreter插件已经面向所有chatGPT plus用户开放了。 为什么说code interpreter插件是一…

国产工业软件的挑战与机遇:风口是否还在燃烧?

随着智能制造与数字化转型等新型工业理念的推广&#xff0c;工业软件在工业领域中的地位日益重要。在这个过程中&#xff0c;国产工业软件也迎来了新的发展机遇。然而&#xff0c;对于国产工业软件而言&#xff0c;是否存在着发展的“风口”&#xff1f;今天&#xff0c;我们将…

使用 SQL 的方式查询消息队列数据以及踩坑指南

Pulsar-sql.png 背景 为了让业务团队可以更好的跟踪自己消息的生产和消费状态&#xff0c;需要一个类似于表格视图的消息列表&#xff0c;用户可以直观的看到发送的消息&#xff1b;同时点击详情后也能查到消息的整个轨迹。 消息列表 点击详情后查看轨迹 原理介绍 由于 Pulsar …

双轨制的发展,弊端和前景

双轨制是一种经济体制&#xff0c;指两种不同的规则或机制并行运行&#xff0c;以适应不同的市场或客户需求。双轨制最早出现在中国的改革开放中&#xff0c;是从计划经济向市场经济过渡的一种渐进式改革方式。 双轨制的发展可以分为三个阶段&#xff1a; 第一阶段&#xff08;…

JVM调优指令参数

常用命令查找文档站点&#xff1a;https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html -XX:PrintFlagsInitial 输出所有参数的名称和默认值&#xff0c;默认不包括Diagnostic和Experimental的参数。可以配合 -XX:UnlockDiagnosticVMOptions和-XX:UnlockEx…

PM3328B-6-1-3-E 可用于远程开/关及其外部控制电路

PM3328B-6-1-3-E 可用于远程开/关及其外部控制电路 焊接机器人、高频放大器、工具机、电解槽等工业应用通常需要在恶劣的环境中工作&#xff0c;这就要求电源在不通风的情况下提供高功率。在这种情况下&#xff0c;传导冷却适用&#xff0c;因此电源必须设计为保证高水平的性能…

SpringCloud--从零开始搭建微服务基础环境入门教程【一】

&#x1f600;前言 本篇博文是关于SpringCloud–从零开始搭建微服务基础环境入门教程【一】&#xff0c;希望你能够喜欢&#x1f609; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮…

Go map转json

在Go中如何返回前端 字段名称/数量都不确定的json数据&#xff1f; 之前用Go写web服务&#xff0c;返回给前端的json格式的接口&#xff0c;有哪些要返回的字段都是明确的。都是预先定义一个结构体&#xff0c;json.Marshal一下即可~ 但当有的场景&#xff0c;要返回哪些字段不…

防火墙日志分析工具

防火墙提供对进入组织网络的网络流量的来源和类型的可见性&#xff0c;这使得防火墙日志成为重要的信息源&#xff0c;包括所有连接的源地址、目标地址、协议和端口号等详细信息&#xff0c;此信息可以提供对未知安全威胁的见解&#xff0c;是威胁管理中的重要工具。 防火墙日…

Hadoop 集群一直处于安全模式,强制退出后出现数据丢失警告。解决方法

文章目录 安全模式相关命令分析集群为什么一直处于安全模式解决方法 安全模式相关命令 # 查看安全模式状态 hdfs dfsadmin -safemode get# 进入安全模式 hdfs dfsadmin -safemode enter# 离开安全模式 hdfs dfsadmin -safemode leave# 强制退出安全模式 hdfs dfsadmin -safemo…

NFT Insider#105:The Sandbox即将参加韩国区块链周,YGG的声誉和进步(RAP)将引领玩家晋升到下一层级

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto&#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周…

对ioc的简单理解

最近闲着无聊&#xff0c;又把ioc梳理了一遍&#xff0c;一边看一边满脑子是王宝强的“啥啥啥&#xff0c;这又是个啥”的表情包。 一会注入、一会依赖、一会又自动装配的……哎……还好有了点头绪。 ioc的概念 1、ioc是什么&#xff1f;有什么用&#xff1f; 老生常谈&…

使用wkhtmltoimage实现生成长图分享

需求 用户可以选择以长图的形式分享本网页 方法 wkhtmltopdf wkhtmltopdf url filewkhtmltoimage url file java Runtime.getRuntime().exec() 下载 直接去官网下载对应的版本&#xff1a;官网 命令行使用WK > wkhtmltopdf https://www.nowcoder.com /opt/project/…

ModaHub魔搭社区:自动化机器学习Auto-Sklearn全面详细教程

Auto-Sklearn的简介 Auto-Sklearn(基于scikit-learn库的自动化的机器学习工具)的概述 简介 Auto-Sklearn,在2015年由德国图宾根大学的研究人员提出的,最初的版本于2016年发布。auto-sklearn基于scikit-learn库进行开发,支持多种机器学习任务,包括分类、回归、时间序列…

【附安装包】Mudbox2023安装教程

软件下载 软件&#xff1a;Mudbox版本&#xff1a;2023语言&#xff1a;英文大小&#xff1a;938.82M安装环境&#xff1a;Win11/Win10/Win8硬件要求&#xff1a;CPU2.5GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.com/s/1K…