地图上绘制地铁线路

2024-06-19 20:04
文章标签 绘制 地图 地铁 线路

本文主要是介绍地图上绘制地铁线路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求背景

不管是之前的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.chinasem.cn/article/1076014

相关文章

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

全英文地图/天地图和谷歌瓦片地图杂交/设备分布和轨迹回放/无需翻墙离线使用

一、前言说明 随着风云局势的剧烈变化,对我们搞软件开发的人员来说,影响也是越发明显,比如之前对美对欧的软件居多,现在慢慢的变成了对大鹅和中东以及非洲的居多,这两年明显问有没有俄语或者阿拉伯语的输入法的增多,这要是放在2019年以前,一年也遇不到一个人问这种需求场景的。 地图应用这块也是,之前的应用主要在国内,现在慢慢的多了一些外国的应用场景,这就遇到一个大问题,我们平时主要开发用的都是国内的地