Python绘制成都地铁全线路图!有路线图也搞不清楚啊!

本文记录使用Python和plotly在地图上绘制成都地铁线路的过程,包括从百度地图API获取站点信息,坐标系转换,以及生成可视化效果。需注意进行坐标转换以确保线路准确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做一个地图可视化的项目需要在地图上画出成都已开通的地铁线路图,中间还是踩了几个小坑,记录一下整个过程。

1. 开发环境

python 3.8
plotly(没安装的自行pip安装)
百度地图API(获取所有线路的地铁站点信息)

2. 效果展示
废话不多说,先上效果图。


3. 实现过程
百度地图开放平台获取站点信息(json格式)
百度坐标系转换到WGS-84坐标系
生成excel或csv表格
plotly绘制线路图

 3.1 百度地图开放平台获取站点信息,链接直接上代码:
1

city_code=75 #成都市城市代码
station_info = requests.get('http://map.baidu.com/?qt=bsi&c=%s&t=%s' % (
                    city_code, 
                    int(time.time() * 1000)
                    ))
station_info_json = eval(station_info.content)
1234567
 3.2  为什么要进行坐标转换
 plotly用的是WGS-84坐标系,而百度地图所使用的坐标体系,是在火星坐标系的基础上又进行了一次加密处理,百度转WGS-84还稍微有点复杂,不过有开源代码,直接拿来用就可以了。
12

简单科普一下国内常用的坐标系(至于为什么有几种不同坐标系请自行google):
地球坐标系——WGS84:常见于 GPS 设备,Google 地图等国际标准的坐标系。
火星坐标系——GCJ-02:中国国内使用的被强制加密后的坐标体系,高德坐标就属于该种坐标体系。
百度坐标系——BD-09:百度地图所使用的坐标体系,是在火星坐标系的基础上又进行了一次加密处理。

3.3 将json数据存为excel文件,一遍mapbox调用,excel文件的格式如下:
1


获取站点信息的完整代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Nov  6 11:16:45 2020

Chengdu Metro Lines by plotly with python

@author: 进击的SB
"""


import requests
import time
import numpy as np
import math
# import plotly.offline as py
# import plotly.graph_objs as go
import pandas as pd


PI = math.pi

null = None
city_code=75
station_info = requests.get('http://map.baidu.com/?qt=bsi&c=%s&t=%s' % (
                    city_code, 
                    int(time.time() * 1000)
                    ))

station_info_json = eval(station_info.content)

# print(station_info_json)



# 解析地铁线路站点信息
for line in station_info_json['content']:
    # i = 0
    plots = []
    plots_name = []
    for plot in line['stops']:
        
        plots.appen
要在中国上海绘制地铁轨迹图,你可以利用Python的数据可视化库,如`matplotlib`或更高级的`geopandas`结合地图服务提供商(例如`folium`)来创建这样的图表。以下是一个简单的步骤: 1. **获取数据**: - 上海地铁数据通常可以从上海公共交通集团的官方网站或者其他开放数据源获取,比如GitHub、API等。 - 数据可能包含地铁线路、站点信息以及列车时刻表等。 2. **数据处理**: - 将数据导入到Python环境中,可能是CSV、JSON或数据库格式。 - 根据需要,整理数据以便于表示为路线和站点的关系。 3. **地理编码**: - 如果数据没有包含精确的地理位置,你需要使用地理编码服务(如Google Maps API或Baidu Geocoding API)将站点名称转换成经纬度坐标。 4. **绘制基础地图**: - 使用`folium`的`WorldMap`或中国的`ChinaMap`创建底图。 - 添加标记点代表地铁站,并用线段连接它们,显示线路走向。 5. **定制样式**: - 设置线条颜色、宽度和箭头样式等。 - 可能还需要添加时间轴或行程规划功能,这涉及到更复杂的数据处理和交互设计。 6. **显示和保存**: - 最后,显示地图并保存为HTML文件或静态图片。 以下是一个简化的代码示例,假设你已经有了地铁线路数据(包含站点名和对应经纬度): ```python import folium # 假设地铁线路数据在这里 stations_data = ... # 包含站点名和经纬度的字典 # 创建世界地图 m = folium.Map(location=[31.2304, 121.4737], zoom_start=12) # 上海大致经纬度 # 绘制站点和线路 for station_name, (lat, lon) in stations_data.items(): folium.Marker([lat, lon], popup=station_name).add_to(m) # 这里假设lines是一个列表,每个元素包含两个站点名,代表一条线路 for line in lines: folium.PolyLine([(stations_data[line[0]][1], stations_data[line[0]][0]), (stations_data[line[1]][1], stations_data[line[1]][0])], color='blue', weight=2).add_to(m) # 显示地图 m.save('shanghai_subway_map.html') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值