使用python获取城市经纬度以及城市间的距离、火车时间、所需成本等

这里写自定义目录标题

  • 1 获取城市地理坐标
  • 2 获取交通数据
  • 3 数据存储
  • 4 代码整合

本案例研究选择了中国的五个中心城市(上海市、深圳市、北京市、广州市、杭州市)和25个边境城市(如巴彦淖尔市、白山市等)作为研究对象。通过调用高德地图API( https://lbs.amap.com/api )来获取城市的地理坐标及从边境城市到中心城市的交通数据,包括距离、时间和费用。

准备材料:
1、搭建python环境
2、注册高德api link
3、获取key link (注册后,才能打开该网站以及下述网站)
3、阅读api说明文档
获取城市经纬度链接: link
在这里插入图片描述

获取城市间的距离、火车时间等: link
在这里插入图片描述

1 获取城市地理坐标

使用高德地图API,根据城市名称获取其地理坐标(经纬度)。这一过程首先构建请求URL,然后发送HTTP请求,最后解析返回的JSON数据以提取所需信息。

import requestsCenterCity_name = ['上海市', "深圳市", "北京市", "广州市", "杭州市"]
BorderCity_name = ['巴彦淖尔市', '白山市', '百色市', '包头市', '保山市', '丹东市', '防城港市', '哈密市', '鹤岗市', '黑河市', '呼伦贝尔市', '鸡西市', '佳木斯市', '酒泉市','林芝市', '临沧市', '牡丹江市', '南宁市', '普洱市', '日喀则市', '山南市', '双鸭山市', '通化市', '乌兰察布市','伊春市']
city_location = []
border_city_location = []#获取指定城市(如上海市)的经纬度
def get_city_location(city_name):url = f'https://restapi.amap.com/v3/config/district?keywords={city_name}&subdistrict=2&key=<准备材料中获取的key>'response = requests.get(url)json_data = response.json()if json_data['districts'] and len(json_data['districts']) > 0:return json_data['districts'][0]['center']else:print(f"{city_name}信息列表为空")return Nonefor city in CenterCity_name:location = get_city_location(city)if location:city_location.append(location)for city in BorderCity_name:location = get_city_location(city)if location:border_city_location.append(location)print("Center City Locations:", city_location)
print("Border City Locations:", border_city_location)

2 获取交通数据

通过构建请求URL,从高德地图API获取边境城市到中心城市的交通数据,包括距离(米)、时间(秒)和费用(元)。

##### 获取BorderCity至CenterCity需要花费的时间、距离和金钱 #####
data = []for center_city, center_loc in city_location.items():for border_city, border_loc in border_city_location.items():if center_loc and border_loc:url = f'https://restapi.amap.com/v5/direction/transit/integrated?origin={border_loc}&destination={center_loc}&show_fields=cost&key=<准备材料中获取的key>'response = requests.get(url)json_data = response.json()if json_data.get('route') and json_data['route'].get('transits'):transits = json_data['route']['transits'][0] distance = transits['distance'] #获取城市间的距离,单位:米duration = int(transits['cost']['duration']) #获取城市间的时间,单位:秒time = duration / 3600 #获取城市间的时间,单位:小时tolls = transits['cost']['transit_fee'] #获取城市间的所需成本,单位:元data.append([border_city, center_city, distance, time, tolls])else:print(f"{border_city} 转乘信息列表为空")

3 数据存储

将获取的交通数据写入CSV文件中,方便后续分析和应用。

with open('city_data.csv', 'w', newline='', encoding='utf-8') as file:writer = csv.writer(file)writer.writerow(["Border City", "Center City", "Distance (m)", "Time (h)", "Tolls (CNY)"])writer.writerows(data)

打开city_data.csv表格,如下图所示
在这里插入图片描述

4 代码整合

import requests
import csv### 研究区城市 ###
CenterCity_name = ['上海市', "深圳市", "北京市", "广州市", "杭州市"]
BorderCity_name = ['巴彦淖尔市', '白山市', '百色市', '包头市', '保山市', '丹东市', '防城港市', '哈密市', '鹤岗市', '黑河市', '呼伦贝尔市', '鸡西市', '佳木斯市', '酒泉市','林芝市', '临沧市', '牡丹江市', '南宁市', '普洱市', '日喀则市', '山南市', '双鸭山市', '通化市', '乌兰察布市','伊春市']##### 获取上述城市的地理坐标 #####
def get_city_location(city_name):url = f'https://restapi.amap.com/v3/config/district?keywords={city_name}&subdistrict=2&key=03fe3cfb4dcfb788868fd9f352ee3726'response = requests.get(url)json_data = response.json()if json_data['districts']:return json_data['districts'][0]['center']else:print(f"{city_name}信息列表为空")return Nonecity_location = {city: get_city_location(city) for city in CenterCity_name}
border_city_location = {city: get_city_location(city) for city in BorderCity_name}##### 获取BorderCity至CenterCity需要花费的时间、距离和金钱 #####
data = []for center_city, center_loc in city_location.items():for border_city, border_loc in border_city_location.items():if center_loc and border_loc:url = f'https://restapi.amap.com/v5/direction/transit/integrated?origin={border_loc}&destination={center_loc}&show_fields=cost&key=<准备材料中获取的key>'response = requests.get(url)json_data = response.json()if json_data.get('route') and json_data['route'].get('transits'):transits = json_data['route']['transits'][0] distance = transits['distance'] #获取城市间的距离,单位:米duration = int(transits['cost']['duration']) #获取城市间的时间,单位:秒time = duration / 3600 #获取城市间的时间,单位:小时tolls = transits['cost']['transit_fee'] #获取城市间的所需成本,单位:元data.append([border_city, center_city, distance, time, tolls])else:print(f"{border_city} 转乘信息列表为空")##### 将数据写入CSV文件 #####
with open('city_data.csv', 'w', newline='', encoding='utf-8') as file:writer = csv.writer(file)writer.writerow(["Border City", "Center City", "Distance (m)", "Time (h)", "Tolls (CNY)"])writer.writerows(data)print("数据已成功写入 city_data.csv 文件。")

通过上述方法,我成功获取了125条城市间的交通数据,并存储在CSV文件中。这些数据可以用于分析不同城市之间的交通连接性和便捷性,为城市交通规划提供数据支持,优化交通布局,结合社会经济数据,分析交通成本对经济发展的影响等。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go泛型详解

引子 如果我们要写一个函数分别比较2个整数和浮点数的大小&#xff0c;我们就要写2个函数。如下&#xff1a; func Min(x, y float64) float64 {if x < y {return x}return y }func MinInt(x, y int) int {if x < y {return x}return y }2个函数&#xff0c;除了数据类…

vue实现a-model弹窗拖拽移动

通过自定义拖拽指令实现 实现效果 拖动顶部&#xff0c;可对整个弹窗实施拖拽&#xff08;如果需要拖动底部、中间内容实现拖拽&#xff0c;把下面的ant-modal-header对应改掉就行&#xff09; 代码实现 编写自定义指令 新建一个ts / js文件&#xff0c;用ts举例 import V…

前端的页面代码

根据老师教的前端页面的知识&#xff0c;加上我也是借鉴了老师上课所说的代码&#xff0c;马马虎虎的写出了页面。如下代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</ti…

Databricks 收购 Tabular 的意义:数据开放框架的胜利

Databricks 宣布收购 Tabular&#xff0c;这是一个由 Apache Iceberg 的原始创建者开发的数据平台&#xff0c;在数据分析行业引发了涟漪。此次收购凸显了开放框架在数据领域日益增长的重要性&#xff0c;预示着数据管理、分析和 AI/ML 计划领域的创新、协作和可访问性的新时代…

QT实现自定义带有提示信息的透明环形进度条

1. 概述 做界面开发的童鞋可能都会遇到这样的需求&#xff0c;就是有一些界面点击了之后比较耗时的操作&#xff0c;需要界面给出一个环形进度条的进度反馈信息. 如何来实现这样的需求呢&#xff0c;话不多说&#xff0c;上效果 透明进度条 2. 代码实现 waitfeedbackprogressba…

如何在 CentOS 上配置本地 YUM 源

引言 CentOS 作为一个流行的企业级 Linux 发行版&#xff0c;依赖 YUM&#xff08;Yellowdog Updater, Modified&#xff09;来管理软件包。YUM 源&#xff08;Repository&#xff09;是软件包存储和分发的中心&#xff0c;它们通常位于互联网上。然而&#xff0c;在某些情况下…

科技与水利的完美融合:从数据采集到智能决策,全面解析智慧水利解决方案如何助力水利行业实现智能化管理

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

c++ 多边形 xyz 数据 获取 中心点方法,线的中心点取中心值搞定 已解决

有需求需要对。多边形 获取中心点方法&#xff0c;绝大多数都是 puthon和java版本。立体几何学中的知识。 封装函数 point ##########::getCenterOfGravity(std::vector<point> polygon) {if (polygon.size() < 2)return point();auto Area [](point p0, point p1, p…

nodejs模板引擎(一)

在 Node.js 中使用模板引擎可以让您更轻松地生成动态 HTML 页面&#xff0c;通过将静态模板与动态数据结合&#xff0c;您可以创建可维护且易于扩展的 Web 应用程序。以下是一个使用 Express 框架和 EJS 模板引擎的基本示例&#xff1a; 安装必要的依赖&#xff1a; 首先&#…

mybatilsplaus 常用注解

官网地址 baomidou注解配置

医疗器械FDA |FDA网络安全测试具体内容

医疗器械FDA网络安全测试的具体内容涵盖了多个方面&#xff0c;以确保医疗器械在网络环境中的安全性和合规性。以下是根据权威来源归纳的FDA网络安全测试的具体内容&#xff1a; 一、技术文件审查 网络安全计划&#xff1a;制造商需要提交网络安全计划&#xff0c;详细描述产…

7-1、2、3 IPFS介绍使用及浏览器交互(react+区块链实战)

7-1、2、3 IPFS介绍使用及浏览器交互&#xff08;react区块链实战&#xff09; 7-1 ipfs介绍7-2 IPFS-desktop使用7-3 reactipfs-api浏览器和ipfs交互 7-1 ipfs介绍 IPFS区块链上的文件系统 https://ipfs.io/ 这个网站本身是需要科学上网的 Ipfs是点对点的分布式系统 无限…

深入Linux:权限管理与常用命令详解

文章目录 ❤️Linux常用指令&#x1fa77;zip/unzip指令&#x1fa77;tar指令&#x1fa77;bc指令&#x1fa77;uname指令&#x1fa77;shutdown指令 ❤️shell命令以及原理❤️什么是 Shell 命令❤️Linux权限管理的概念❤️Linux权限管理&#x1fa77;文件访问者的分类&#…

【香橙派 Orange pi AIpro】| 开发板深入使用体验

目录 一. &#x1f981; 写在前面二. &#x1f981; 愉快的安装流程2.1 安装前准备2.2 流程准备2.2.1 烧录镜像2.2.2 开机2.2.3 连网2.2.4 SSH远程连接开发板 2.3 体验 AI 应用样例 三. &#x1f981; 写在最后 一. &#x1f981; 写在前面 大家好&#xff0c;我是狮子呀&…

react 组件通信 —— 父子传值 【 函数式/类式 】

1、函数式组件通信 父子间通信 —— 父传子 父组件 export default function father() {return (<div style{{width:400px,height:200px,background:pink,marginLeft:500px}}>我是父组件<hr /><Son name{"韩小刀"}/></div>) } 子组件 ex…

数据结构--二叉树相关习题5(判断二叉树是否是完全二叉树 )

1.判断二叉树是否是完全二叉树 辨别&#xff1a; 不能使用递归或者算节点个数和高度来判断。 满二叉树可以用高度和节点来判断&#xff0c;因为是完整的。 但是完全二叉树前面是满的&#xff0c;但是最后一层是从左到右连续这种 如果仍然用这种方法的话&#xff0c;如下图…

代码随想录二刷7.22|977.有序数组的平方

暴力解法&#xff1a; ——如果想暴力解决这个问题的话&#xff0c;可以像题目那样&#xff0c;先将每一个元素平方&#xff0c;然后再排序 双指针&#xff1a; ——从题目中找到的信息&#xff1a;这是一个非递减顺序的整数数组&#xff0c;从例子中&#xff0c;可以容易看…

STM32 - SPI硬件外设

配合我的上一篇SPI ​​​​​​通信 协议-CSDN博客一起理解更佳&#xff0c;本文后看 SPI 是由摩托罗拉(Motorola)公司开发的全双工同步串行总线&#xff0c;是 MCU 和外围设备之间进行通信的同步串行端口。主要应用在EEPROM、Flash、RTC、ADC、网络控制器、MCU、DSP以及数字信…

PostgreSQL 中如何处理数据的批量更新和事务日志管理?

文章目录 PostgreSQL 中数据的批量更新和事务日志管理 PostgreSQL 中数据的批量更新和事务日志管理 在数据库的世界里&#xff0c;数据的批量更新和事务日志管理就像是一场精心编排的舞蹈&#xff0c;需要精准的步伐和协调的动作。对于 PostgreSQL 而言&#xff0c;这两个方面…

数学建模美赛经验小结

图片资料来自网络所听讲座&#xff0c;感谢分享&#xff01;