地图上绘制地铁线路

news2024/11/10 14:15:17

需求背景

不管是之前的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

功能扩展

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

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

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

相关文章

从零开始! Jupyter Notebook的安装教程

&#x1f680; 从零开始! Jupyter Notebook的安装教程 摘要 &#x1f4c4; Jupyter Notebook 是一个广受欢迎的开源工具&#xff0c;特别适合数据科学和机器学习的开发者使用。本文将详细介绍从零开始安装 Jupyter Notebook 的步骤&#xff0c;包括各种操作系统的安装方法&am…

Fisnar Liquid Control 操作维修手LC Pump Manual Twinmixer Maintenance 中文

Fisnar Liquid Control 操作维修手LC Pump Manual Twinmixer Maintenance 中文

python读取excel中的图片超链接,批量下载到本地

1、代码 import xlrd import requestsread_path C:\\Users\\asus\\Desktop\\大法\\公务员\\国考\\行测\\1-推理判断\\URLs.xlsx bk xlrd.open_workbook(read_path) shxrange range(bk.nsheets) sh bk.sheet_by_name("Sheet2") nrows sh.nrows ncols sh.ncols …

Linux安装kvm虚拟机

kvm是基于内核的虚拟机&#xff0c;为什么要用kvm不用vmware、virtual box… 只有一个原因&#xff0c;它非常快&#xff01;本机使用linux开发也是因为它快&#xff01;linux在老电脑上都能流畅运行&#xff0c;更别说现代电脑&#xff0c;如果你觉得装Linux并没有比win快多少…

【网络安全学习】漏洞扫描:-01- 漏洞数据库searchsploit的使用

漏洞数据库是收集和存储各种软件漏洞信息的资源库。 漏洞数据库通常包含漏洞的名称、编号、描述、影响范围、危害等级、解决方案等信息&#xff0c;有些还提供漏洞的分析报告、演示视频、利用代码等内容。 1.常用的在线漏洞库&#xff1a; 国家信息安全漏洞共享平台 https:/…

pytorch基础【4】梯度计算、链式法则、梯度清零

文章目录 梯度计算计算图&#xff08;Computational Graph&#xff09;梯度求导&#xff08;Gradient Computation&#xff09;函数与概念 示例代码更多细节梯度求导的过程梯度求导的基本步骤示例代码注意事项总结 链式法则是什么&#xff1f;链式法则的数学定义链式法则在深度…

项目3:从0开始的RPC框架(扩展版)-3

七. 负载均衡 1. 需求分析 目前我们的RPC框架仅允许消费者读取第一个服务提供者的服务节点&#xff0c;但在实际应用中&#xff0c;同一个服务会有多个服务提供者上传节点信息。如果消费者只读取第一个&#xff0c;势必会增大单个节点的压力&#xff0c;并且也浪费了其它节点…

轻松解决App渠道合作痛点,Xinstall带参数安装让您事半功倍

在互联网流量红利逐渐衰退的今天&#xff0c;App推广和运营面临着前所未有的挑战。如何确保在多变的互联网环境下&#xff0c;迅速搭建起能时刻满足用户需求的运营体系&#xff0c;成为了众多企业急待解决的问题。Xinstall作为一款专注于解决App推广痛点的工具&#xff0c;通过…

企业如何选择合适的CRM工具?除Salesforce之外的10大主流选择

对比salesforce&#xff0c;其他10款优秀CRM&#xff1a;纷享销客CRM、Zoho CRM、腾讯企点、销售易、企业微信 (WeCom)、Odoo CR、OroCRM、金蝶、用友CRM、EspoCRM 虽然Salesforce以其全面的功能和强大的市场占有率在海外收获了许多客户&#xff0c;但Salesforce在国内市场的接…

就业市场挑战重重,求职者如何进入Salesforce生态系统?

目前&#xff0c;就业市场充满挑战&#xff0c;轻松进入Salesforce生态系统的日子已经一去不复返了。尽管入门级角色仍然存在&#xff0c;但市场上的申请者数量已超过其需求。成千上万的求职者争夺有限的职位&#xff0c;因此从人群中脱颖而出需要制定战略方法&#xff0c;求职…

集合系列(二十六) -利用LinkedHashMap实现一个LRU缓存

一、什么是 LRU LRU是 Least Recently Used 的缩写&#xff0c;即最近最少使用&#xff0c;是一种常用的页面置换算法&#xff0c;选择最近最久未使用的页面予以淘汰。 简单的说就是&#xff0c;对于一组数据&#xff0c;例如&#xff1a;int[] a {1,2,3,4,5,6}&#xff0c;…

C++ 网络套接字编程 tcp udp

文章目录 网络通信的本质tcp 和 udp 协议网络字节序网络主机数据转化接口 udp 通信服务端逻辑客户端逻辑 TCP 通信服务端程序编写步骤客户端程序编写步骤 两种通信程序代码udp服务端程序编写udp 客户端程序编写tcp 服务端程序编写tcp 客户端程序编写 网络通信的本质 网络之间的…

香港电讯高可用网络助力企业变革金融计算

客户背景 客户是一家金融行业知名的量化私募对冲基金公司&#xff0c;专注于股票、期权、期货、债券等主要投资市场&#xff0c;在量化私募管理深耕多年&#xff0c;目前资管规模已达数百亿级&#xff0c;在国内多个城市均设有办公地点。 客户需求 由于客户业务倚重量化技术…

内网渗透-隧道搭建ssp隧道代理工具frp内网穿透技术

内网渗透-隧道搭建&ssp隧道代理工具&frp内网穿透 内网穿透&#xff1a;解决网络控制上线&网络通讯问题 隧道技术&#xff1a;解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; 代理技术&#xff1a;解决网络通讯不通的问题&#xff0…

C++ —— unordered_set、unordered_map的介绍及使用

目录 unordered系列关联式容器 unordered_set的介绍 unordered_set的使用 unordered_set的定义方式 unordered_set接口的使用 unordered_multiset unordered_map的介绍 unordered_map的使用 unordered_map的定义方式 unordered_map接口的使用 unordered_multimap …

【两数之和】

两数之和 一、题目二、暴力解法三、哈希表四、map字典1.基本方法.set()添加键值对.get()通过键获取值.has()判断map是否有这个键 2.map和set的联系和区别共同点共同点MapSet 一、题目 二、暴力解法 三、哈希表 解题思路&#xff1a;将nums的元素依次以键值对的方式存储在map字典…

怎么看OV泛域名证书市场占有率提升

近年来&#xff0c;随着网络安全的逐渐普及&#xff0c;使用SSL证书的站点也逐渐增多。https证书也成为了当下最受欢迎的数字证书之一&#xff0c;主要是用于保护网站和应用程序的安全&#xff0c;并提升用户对网站的信任度&#xff0c;且只有企业或组织才可申请OV级别的SSL证书…

VMware虚拟机三种网络模式设置 - Bridged(桥接模式)

一、前言 由于linux目前很热门&#xff0c;越来越多的人在学习linux&#xff0c;但是买一台服务放家里来学习&#xff0c;实在是很浪费。那么如何解决这个问题&#xff1f;虚拟机软件是很好的选择&#xff0c;常用的虚拟机软件有vmware workstations和virtual box等。 在使用虚…

uniapp app一键登录

一键登录不需要单独写页面&#xff0c;uniapp 有原生的页面 第一步&#xff0c;登录Dcloud后台》我的应用》点击应用名称 填写完点击 uniCloud模块新建一个服务空间》选择免费 , 创建完点击一键登录&#xff0c;添加应用&#xff0c;这个需要审核&#xff0c;“大概一天左右”…

yolov10官方demo

python环境3.9 GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection 将模型移动到项目目录下 项目执行导入依赖 conda create -n yolov10 python3.9 conda activate yolov10 pip install -r requirements.txt pip install -e .