地图上绘制地铁线路

需求背景

不管是之前的pms 地铁还是location都会有需求涉及到地图上绘制地铁线路,来查看当前位置是否靠近地铁口,常规的交互可以看下高德地图,如图所示:

image-20240619172124702

需求分析

不管是高德地图还是百度地图都提供了简易版的地铁线路图,比如https://map.amap.com/subway/index.html,也提供了JS APIhttps://lbs.amap.com/api/subway-api/subway-summary/。

缺点是只有单独的地铁图,没有跟地图整合到一起,没有具体位置的概念

基于以上原因需要自己绘制地铁线

思路整理

  1. 首先要获取地铁线的经纬度,通过 AMap.LineSearch 初始化,AMap.LineSearch 定义获取某个城市交通信息,AMap.LineSearch.search 关键词搜索线路内容,理论上获取第一个就可以
  2. 获取站点经纬度,通过公司数据库输出经纬度
  3. 通过AMap.Polyline绘制地铁线,通过AMap.Marker绘制站点标记

核心代码

// 绘制路线
map.plugin('AMap.LineSearch', () => {
  var linesearch = new window.AMap.LineSearch({
    pageIndex: 1, // 第一页的线路
    city: '杭州',
    pageSize: 100, // 每一页的线路条数
    extensions: 'all' // 所有线路类型
  });
  console.log(`linesearch = `, linesearch);


  // 开始搜索
  var name = '地铁5号线';
  linesearch.search(name, (status, result) => {
    console.log(`status, result = `, status, result);
    if (status === 'complete' && result.info === 'OK') {
      // 查询成功调用
      lineSearch_Callback(result);
    } else {
      console.log('查询出错');
    }
  });

  /* 地铁路线查询服务返回数据解析概况 */
  function lineSearch_Callback (data) {
    var lineArr = data.lineInfo;
    var lineNum = data.lineInfo.length;
    if (lineNum === 0) {
      console.log(lineNum);
    } else {
      for (var i = 0; i < lineNum; i++) {
        var pathArr = lineArr[i].path;
        if (i === 0) { // 只绘制一条线路,就是需要高亮的地铁线路
          drawbusLine(pathArr);
        }
      }
    }
  }

  /* 绘制路线 */
  function drawbusLine(BusArr) {
    new window.AMap.Polyline({
      map: map,
      path: BusArr,
      strokeColor: '#000', // 线颜色
      strokeOpacity: 1, // 线透明度
      isOutline: true,
      outlineColor: 'white',
      strokeWeight: 10 // 线宽
    });
  }

});
// 绘制站点
const subway5 = [
  { name: '博奥路', lng: '120.244164', lat: '30.182338' },
  { name: '姑娘桥', lng: '120.330526', lat: '30.175919' },
  { name: '三坝', lng: '120.097778', lat: '30.300714' },
  { name: '江晖路', lng: '120.212417', lat: '30.181579' },
  { name: '滨康路', lng: '120.231003', lat: '30.183864' },
  { name: '打铁关', lng: '120.176739', lat: '30.285425' },
  { name: '杭师大仓前', lng: '120.01721', lat: '30.288592' },
  { name: '南星桥', lng: '120.177384', lat: '30.217295' },
  { name: '萍水街', lng: '120.112745', lat: '30.302806' },
  { name: '和睦', lng: '120.119367', lat: '30.308544' },
  { name: '五常', lng: '120.045156', lat: '30.296292' },
  { name: '建国北路', lng: '120.181413', lat: '30.264496' },
  { name: '大运河', lng: '120.131684', lat: '30.319283' },
  { name: '良睦路', lng: '120.007201', lat: '30.285632' },
  { name: '拱宸桥东', lng: '120.147679', lat: '30.317058' },
  { name: '创景路', lng: '119.998033', lat: '30.278112' },
  { name: '通惠中路', lng: '120.285183', lat: '30.180485' },
  { name: '聚才路', lng: '120.198803', lat: '30.182426' },
  { name: '金星', lng: '119.966536', lat: '30.265041' },
  { name: '双桥', lng: '120.308770', lat: '30.173139' },
  { name: '长河', lng: '120.194533', lat: '30.197087' },
  { name: '绿汀路', lng: '119.992062', lat: '30.260140' },
  { name: '葛巷', lng: '119.998820', lat: '30.270354' },
  { name: '善贤', lng: '120.160651', lat: '30.317478' },
  { name: '人民广场', lng: '120.266831', lat: '30.179593' },
  { name: '金鸡路', lng: '120.253402', lat: '30.181697' },
  { name: '浙大紫金港', lng: '120.077192', lat: '30.294129' },
  { name: '杭氧', lng: '120.178944', lat: '30.294335' },
  { name: '宝善桥', lng: '120.179847', lat: '30.271957' },
  { name: '蒋村', lng: '120.068483', lat: '30.294809' },
  { name: '江城路', lng: '120.178205', lat: '30.238561' },
  { name: '永福', lng: '120.027057', lat: '30.291577' },
  { name: '育才北路', lng: '120.277897', lat: '30.180823' },
  { name: '东新园', lng: '120.175787', lat: '30.308268' },
  { name: '火车南站', lng: '120.297331', lat: '30.172670' },
  { name: '万安桥', lng: '120.180595', lat: '30.254052' },
  { name: '城站', lng: '120.180770', lat: '30.244567' },
  { name: '西文街', lng: '120.169932', lat: '30.316037' },
  { name: '候潮门', lng: '120.173019', lat: '30.226616' }
];


const markers: any = [];
subway5.map((item: any) => {
  markers.push(
    new window.AMap.Marker({
      position: new window.AMap.LngLat(item.lng, item.lat),
      icon: '//webapi.amap.com/theme/v1.3/markers/b/mark_bs.png',
      anchor: 'bottom-center',
    })
  );
});
map.add(markers);

效果展示

image-20240619174332551

功能扩展

可以绘制不同颜色线路串联站点,相当于把简易版的地铁线路图覆盖在地图上。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AI】通义千问使用指南:让你快速上手,成为问题解决高手!

大家好&#xff0c;我是木头左。 近日&#xff0c;继文心一言和讯飞星火之后&#xff0c;阿里虽迟但到&#xff0c;直接宣布开源两款“通义千问”大模型。作为国内首个开源且可商用的人工智能大模型&#xff0c;这会给我们带来哪些变化呢&#xff1f; 如何申请阿里通义千问&am…

RK3568技术笔记十二 Android编译方法

Android源码说明 Android源码在SAIL-RK3568开发板光盘->Android->源代码中&#xff0c;由于android源码太大&#xff0c;在进行压缩时&#xff0c;进行分包压缩&#xff0c;因此有4部分&#xff0c;如图所示&#xff1a; 进行解压时&#xff0c;需将4部分压缩包放置同一…

Redis的安装及详解

1.Redis介绍&#xff1f; 1.1 Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server,远程字典服务器&#xff09;是一个开源免费的&#xff0c;用C语言编写的一个高性能的分布式内存数据库&#xff0c;基于内存运行并支持持久化的NoSQL数据库。是当前最热门的…

若依RuoYi-Vue分离版—富文本Quill的图片支持伸缩大小及布局

若依RuoYi-Vue分离版—富文本Quill的图片支持伸缩大小及布局、工具栏带中文提示 1.在vue.config.js 文件中添加 一下内容2.下载安装插件3.在Editor组件中引入插件4.使用Editor组件&#xff08;特别注意要的加 v-if &#xff09;5.bug 之 imageResize的 img的style丢失1.先创建一…

山东大学软件学院创新项目实训开发日志——收尾篇

山东大学软件学院创新项目实训开发日志——收尾篇 项目名称&#xff1a;ModuFusion Visionary&#xff1a;实现跨模态文本与视觉的相关推荐 -------项目目标&#xff1a; 本项目旨在开发一款跨模态交互式应用&#xff0c;用户可以上传图片或视频&#xff0c;并使用文本、点、…

Canonical Juju 的一个奇怪编排部署

一周前的一个项目扩容出现了异常&#xff0c;进行了操作回滚&#xff0c;未对线上业务造成损失。 现象是这样的&#xff1a; 通过基于 Canonical Juju-GUI 在一组节点上部署了某个组件&#xff0c;在把这组节点添加到集群后&#xff0c;有4个节点上出现了同一组件的2个instanc…

WDF驱动开发-计时器

WDF可以使用框架的内置计时器支持。 它适用于 Kernel-Mode Driver Framework (KMDF) 驱动程序&#xff0c;以及从版本 2 开始的 User-Mode Driver Framework (UMDF) 驱动程序。 框架提供了一个 计时器对象 &#xff0c;使驱动程序能够创建计时器。 在驱动程序创建计时器对象并…

Scala语言:大数据开发的未来之星 - 零基础到精通入门指南

前言 随着大数据时代的到来&#xff0c;数据量的急剧增长为软件开发带来了新的挑战和机遇。Scala语言因其函数式编程和面向对象的特性&#xff0c;以及与Apache Spark的完美协作&#xff0c;在大数据开发领域迅速崛起&#xff0c;成为该领域的新兴宠儿。本篇将从零基础开始&…

Vue59-全局事件总线:任意组件间通信

一、原理图 只是总结出的经验&#xff0c;不是新的API&#xff01; 二、x的要求&#xff1a; 1、保证x被所有组件看见&#xff1b; 2、x可以调用的到$on&#xff0c;才能绑定事件&#xff0c;还能调用到&#xff1a;$of&#xff0c; $emit&#xff1b; 三、x的创建&#xff…

手把手教你创建并启动一个Vue3项目(Windows版)

一、Node安装 1、下载地址&#xff1a;Node.js — Run JavaScript Everywhere 2、安装Node&#xff0c;双击启动一直Next 3、验证安装Node是否成功&#xff0c;打开CMD命令窗口&#xff0c;输入node -v&#xff0c;显示版本就表示成功 4、验证安装npm是否成功&#xff0c;npm是…

sqlite3指令操作-linux

1.查看当前数据库位置 2.查看当前数据库文件下有哪些表 3.显示 某表创建时的SQL语句 4.打开、关闭显示列标题&#xff1b; 5.列对齐显示 6.列以‘&#xff0c;’分隔显示 .separator 7.查询表信息 8.插入消息 9.删除某一行内容 10.修改某行某列内容 11.修改表名字 alter tab…

开发者黑板报#65

第65期 AI 谷歌Gemini 终于&#xff0c;GPT-4独霸时代终结了&#xff01; 过去一个月里&#xff0c;四款大模型横空出世&#xff0c;在各项关键基准测试中与GPT-4相匹敌&#xff0c;甚至更胜一筹。 谷歌Gemini 1.5突破100万个tokens&#xff0c;是GPT-4的近8倍&#xff0c…

办公楼导航系统:设计要点、功能实现与效益评估

随着现代办公楼的日益复杂化和规模化&#xff0c;如何高效、便捷地在楼宇内部进行定位和导航&#xff0c;已成为众多企业和员工关注的焦点。维小帮办公楼定位导航系统通过精准的定位和智能的导航功能&#xff0c;能够显著提升办公环境的智能化水平和办公效率。 一、维小帮办公…

嵌入式实验---实验一 通用GPIO实验

一、实验目的 1、掌握STM32F103 GPIO程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、通过按键实现&#xff1a;按键按下&#xff0c;LED点亮&#xff1b;按键释放&#xff0c;LED熄灭。 三、实验设备和器材 电脑、Keil uVision5软件、Proteus…

Top10在线音频剪辑软件,你了解几款?(免费分享)

多年来&#xff0c;随着音乐制作人和音频工程师的需求不断增长&#xff0c;音频剪辑软件领域经历了巨大的发展。最新的音频剪辑软件提供了从基本录制到最终发布所需的一切功能。其中一些软件专为播客设计&#xff0c;一些软件是免费的&#xff0c;并且一些软件提供了出色的音效…

【Win】双系统新体验:Hyper-V上macOS安装攻略

在虚拟化的世界里&#xff0c;Hyper-V是探索不同操作系统的一扇大门。尽管macOS并不是Hyper-V官方支持的来宾操作系统&#xff0c;但这并未阻挡技术探索者的脚步。他们通过不懈努力&#xff0c;开辟出了一条条通往macOS的非官方路径。这些路径或许曲折&#xff0c;却为那些渴望…

Z世代职场价值观的重塑:从“班味”心态到个人成长的追求

近日&#xff0c;社交平台Soul APP联合上海市精神卫生中心&#xff08;俗称“宛平南路600号”&#xff09;发布《2024年Z世代职场心理健康报告》&#xff08;下称“报告”&#xff09;&#xff0c;发现今天的年轻人正以其独特的价值观和行为模式&#xff0c;重新定义成功与成就…

机器学习_SVM支持向量机

引入&#xff1a;在面对线性可分时&#xff0c;即用一条直线就可以区分数据的时候&#xff0c;需要将直线放在距离数据点距离最大化的位置&#xff0c;这个过程需要寻找最大间隔&#xff0c;即为最优化问题。当数据点不能用一根直线区分——线性不可分&#xff0c;就需要用核函…

瑞数信息入选IDC《中国WAAP厂商技术能力评估,2024》

5星满分&#xff1a;WAF、Bot流量管理、行业应用等评估维度 日前&#xff0c;全球领先的IT市场研究和咨询公司IDC发布《中国WAAP厂商技术能力评估&#xff0c;2024》。报告聚焦WAAP能力&#xff0c;通过对中国市场中主要WAAP产品提供商的技术评估以及对大量最终用户的客观访谈…

SpringBoot配置第三方专业缓存技术Ehcache

Ehcache缓存技术 我们刚才是用Springboot提供的默认缓存技术 我们用的是simple 是一个内存级的缓存 我们接下来要使用专业的缓存技术了 Ehcache 是一个流行的开源 Java 分布式缓存&#xff0c;由 Terracotta 公司开发和维护。它提供了一个快速、可扩展、易于集成的内存缓存…