地图上绘制地铁线路

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绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建

使用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