热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python获取向上两级路径_【第三弹】python|获取web自行车路径规划数据

路径规划API是一套以HTTP形式提供的步行、公交、驾车查询及行驶距离计算接口,返回JSON或XML格式的查询数据,用于实现路径规划功能的开发。获取可利
c66c5cb82b48ea949b02be4f9de8a522.png

路径规划API是一套以HTTP形式提供的步行、公交、驾车查询及行驶距离计算接口,返回JSON 或 XML格式的查询数据,用于实现路径规划功能的开发。获取可利用的路径规划信息有助于辅助交通研究者的深入探索。本节将对静态的自行车信息规划有效的路径,为进一步地深入研究做准备。

API使用说明

step 1,申请”Web服务API”密钥(Key)

step 2,拼接HTTP请求URL,step 1申请的Key需作为必填参数一同发送

step 3,接收HTTP请求返回的数据(JSON或XML格式),解析数据

注意:骑行路径规划用于规划骑行通勤方案,规划时不会考虑路况;考虑天桥、单行线、封路等情况。

通过学习开发文档,编写python脚本实现对自行车路径规划的数据获取。

python实现脚本请看下文!!!

import pandas as pd
import requests
import time
import shapefile
import math
#坐标转换,高德转WGS84
x_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626 # π
a = 6378245.0 # 长半轴
ee = 0.00669342162296594323 # 偏心率平方def gcj02_to_wgs84(lng, lat):"""GCJ02(火星坐标系)转GPS84:param lng:火星坐标系的经度:param lat:火星坐标系纬度:return:"""if out_of_china(lng, lat):return [lng, lat]dlat = _transformlat(lng - 105.0, lat - 35.0)dlng = _transformlng(lng - 105.0, lat - 35.0)radlat = lat / 180.0 * pimagic = math.sin(radlat)magic = 1 - ee * magic * magicsqrtmagic = math.sqrt(magic)dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)mglat = lat + dlatmglng = lng + dlngreturn [lng * 2 - mglng, lat * 2 - mglat]def _transformlat(lng, lat):ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * math.sqrt(math.fabs(lng))ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 *math.sin(2.0 * lng * pi)) * 2.0 / 3.0ret += (20.0 * math.sin(lat * pi) + 40.0 *math.sin(lat / 3.0 * pi)) * 2.0 / 3.0ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 *math.sin(lat * pi / 30.0)) * 2.0 / 3.0return retdef _transformlng(lng, lat):ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * math.sqrt(math.fabs(lng))ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 *math.sin(2.0 * lng * pi)) * 2.0 / 3.0ret += (20.0 * math.sin(lng * pi) + 40.0 *math.sin(lng / 3.0 * pi)) * 2.0 / 3.0ret += (150.0 * math.sin(lng / 12.0 * pi) + 300.0 *math.sin(lng / 30.0 * pi)) * 2.0 / 3.0return ret
#读取数据
def read_csv(path):file = pd.read_excel(path,index_col=[0],encoding="utf_8_sig",date_parser=[1,2,3])file = pd.DataFrame(file)print(file)return file#提取输入数据
def extract_data(file):#提取输入数据,赋值每个变量origin_lng = file["ori_lng"]origin_lat = file["ori_lat"]destination_lng = file["des_lng"]destination_lat = file["des_lat"]return origin_lng,origin_lat,destination_lng,destination_lat#发送请求解析数据
def mapping(origin_lng,origin_lat,destination_lng,destination_lat,my_key):l = []key = my_keyn = 0for i in range (len(origin_lat)):n += 1print("已经成功匹配{}条数据".format(n))#构造urlurl ="https://restapi.amap.com/v4/direction/bicycling?origin={},{}&destination={},{}&key={}"u = url.format(origin_lng.values[i],origin_lat.values[i],destination_lng.values[i],destination_lat.values[i],key)#发送请求time.sleep(0.2)r = requests.get(u).json()try:#解析返回返回数据#距离origin = r["data"].get("origin")o_lnglat = origin.split(",")destination = r["data"].get("destination")d_lnglat = destination.split(",")distance = r["data"]["paths"][0].get("distance")#耗时duration = r["data"]["paths"][0]["duration"]step = r["data"]["paths"][0]["steps"]for j in range (len(step)):#第i条记录,第j个路段的起始坐标print(step[j])p = step[j]["polyline"]p1 = p.split(";")for k in range(len(p1)):p2 = p1[k].split(",")#添加数据到列表l.append([i,distance,duration,float(p2[0]),float(p2[1]),float(o_lnglat[0]),float(o_lnglat[1]),float(d_lnglat[0]),float(d_lnglat[1])])except:with open(r"./error.txt","a") as f:f.write("{},{},{},{}错误n".format(origin_lng.values[i],origin_lat.values[i],destination_lng.values[i],destination_lat.values[i]))continueresult = pd.DataFrame(l,columns=["record","distance","time","lng","lat","origin_lng","origin_lat","destination_lng","destination_lat"])# 转化坐标result["lng84"] = 0.00result["lat84"] = 0.00for i in range(len(result)):result["lng84"][i] = gcj02_to_wgs84(float(result["lng"][i]), float(result["lat"][i]))[0]result["lat84"][i] = gcj02_to_wgs84(float(result["lng"][i]), float(result["lat"][i]))[1]return result
#储存数据
def save_data(result):result.to_csv(r"./bike_trip.csv",encoding="utf-8_sig")print("已完成")def main():path = r"./OD_bike.xlsx"key = '你的key值'file = read_csv(path)o_lng,o_lat,d_lng,d_lat = extract_data(file)print(o_lat.values)result = mapping(o_lng,o_lat,d_lng,d_lat,key)save_data(result)if __name__ == "__main__":main()

通过运行以上脚本,将得到的北京市自行车路径数据在ArcGIS中进行可视化,得到效果图如下。

8c29928f2f78117a9e75a4e041be87b1.png

交通充电圈(微信号|Transport_Circle)

25effe34595ccd771b3152c77646c125.png



推荐阅读
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 使用方法:将要控制的角色拖到TargetBody,将相机的焦点拖到CamerPivot,,建议CameraPivot是一个放在TargetBody下的子物体,并且位置应该是在Tar ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • 图数据库与传统数仓实现联邦查询使用CYPHER实现从关系数据库过滤时间序列指标一、MySQL得到研报实体在Oracle中的唯一ID二、Oracle中过滤时间序列数据三、CYPHER ... [详细]
  • 任务通知是 FreeRTOS 中的一个可选功能,需要通过配置宏 `#define configUSE_TASK_NOTIFICATIONS 1` 来启用。每个任务控制块 (TCB) 都包含一个32位的通知值,用于任务间的同步和通信。 ... [详细]
  • 本文探讨了在 SQL Server 2012 的 Integration Services 项目中配置 ADO.NET 源时遇到的错误及其解决方案。 ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
author-avatar
迷失刀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有