ArcGisPro脚本工具【7】——通过高德地图API获取公交线路

编程入门 行业动态 更新时间:2024-10-27 08:30:25

ArcGisPro脚本工具【7】——通<a href=https://www.elefans.com/category/jswz/34/1767514.html style=过高德地图API获取公交线路"/>

ArcGisPro脚本工具【7】——通过高德地图API获取公交线路

本次Arcpy脚本工具用的是ArcGisPro2.8版本,尽量使用同一版本,其它版本可以参照。

工具介绍

本工具的主要功能是通过高德的API接口提取公交线路的坐标和属性信息,并转换为矢量,保存到GDB数据库中。

我尝试过2种方法,一种是用python的requests库,直接写成脚本,获取公交信息。但毕竟个人水平有限,代码写的稀烂,发现速度实在太慢,一个城市10多分钟,于是放弃了。

另一种方式就是用FME。FME自还的httpcaller转换器方便好用,而且效率奇高,速度比第1种方法快了10倍不止,于是确定用FME。

通过安装ArcGIS Pro安装包全家桶里的【Data_Interoperability】,就可以在ArcGIS Pro中使用FME工具了,具体安装和使用方法,看我之前发的文章,里面有详细介绍:

ArcGisPro脚本工具【6】——湘源画的规划用地CAD带指标导入ArcGIS数据库=1001.2014.3001.5501

FME模板和脚本工具

FME模板

FME模板内容比较复杂,主要包括以下几大块的内容,篇幅所限,这里只简单介绍思路。想了解的可以直接打开模板查看。FME模板会在文章末尾随工具放出下载。

1、前3步主要功能是通过8848网站获取全国的城市名称,再通过城市名获取所在城市的公交线路名单。

2、第4步是工具的主要功能块,通过高德的API接口提取公交线路的坐标和属性信息。

3、第5、6步是解析得到的信息,分别提取出公交线路和公交站点的信息,并生成公交线路和公交站点。

脚本工具

平时工作中,有些方法我分离出来作为基础工具来调用,因此文件包有些乱,其中【BUG-爬取公交线路】是最终的运行工具,但是其它的文件和工具也不能删。

最终工具的参数有4个。

1、【输入城市名】——输入地级市名称(我试过县级市,会出错,应该是不支持)。格式如上图【莆田】,而不是【莆田市】,要注意。

2、【输出公交线路】——输出一个线要素的公交线路。

3、【输出公交站点】——输出一个点要素的公交站点。

4、【坐标系】——给要素点义的坐标系,根据所在城市有所不同(根据城市所在经度确定,这方面的知识可百度)。

PS:其实还有2个重要的参数,高德地图的【key】和【安全密钥】,我在FME里已经默认填上了。高德的【key】有每天的使用限制,用的人多了会出现超出上限不能使用的情况。

不过这个工具使用【key】的申请量并不大,一般问题不大,我就不放出来了。如果出现超限制的情况,可以自行上高德开放平台去申请,申请好后打开FME模板,手动修改,位置如下:

 

脚本编写

主要思路

由于主要工具是FME写的,所以脚本里的代码只是基本的一些框架代码,以及对几个基础工具的调用。这里只列一下主工具的代码,其他工具和FME模板可以自行打开查看。

完整代码如下:

# -*- coding:utf-8 -*-
import arcpy
import osarcpy.env.overwriteOutput = True# 工具箱输入参数
city_name = arcpy.GetParameterAsText(0)      # 输入城市名
bus_line = arcpy.GetParameterAsText(1)      # 输出公交线路
bus_point = arcpy.GetParameterAsText(2)      # 输出公交站点
projection = arcpy.GetParameterAsText(3)      # 输入坐标系# 获取文档位置
default_path = os.path.dirname(__file__)
arcpy.ImportToolbox(default_path + r"\cc工具箱.tbx")  # 加载cc工具箱# 创建公交线路\站点
def BusLine():arcpy.AddMessage(r'_____创建中间数据库_____')# 判断数据库里是否已经有存在同名要素【如果有则清除】path = default_path + r'\公交'# 创建一个空的文件夹,用于储存导出文件is_exist = os.path.exists(path)  # 判断文件夹是否存在if is_exist:arcpy.cc.RemoveAllFile(path) # 移除文件夹下的所有文件os.removedirs(path)  # 移除文件夹os.makedirs(path)  # 创建文件夹arcpy.AddMessage(r'_____调用【FME-爬取高德公交】_____')# 调用【FME-爬取高德公交】arcpy.cc.FMEbus(city_name,path)arcpy.AddMessage(r'_____复制要素并定义投影【WGS_1984】_____')# 定义投影【WGS_1984】arcpy.DefineProjection_management(path + r'\公交线路.shp',"GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",""6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]")arcpy.DefineProjection_management(path + r'\公交站点.shp',"GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",""6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]")# 删除重复点arcpy.cc.Repeat(path + r'\公交线路.shp', bus_line + '6')arcpy.cc.Repeat(path + r'\公交站点.shp', bus_point + '6')# 投影arcpy.Project_management(bus_line + '6', bus_line + '3', projection)arcpy.Project_management(bus_point + '6', bus_point + '3', projection)# 复制arcpy.CopyFeatures_management(bus_line + '3', bus_line)arcpy.CopyFeatures_management(bus_point + '3', bus_point)# 移除文件夹arcpy.cc.RemoveAllFile(path)os.removedirs(path)arcpy.Delete_management(bus_line + '6')arcpy.Delete_management(bus_point + '6')arcpy.Delete_management(bus_line + '3')arcpy.Delete_management(bus_point + '3')if __name__ == '__main__':BusLine()

结果展示

结果生成的公交线路和公交站点如下:

其实生成结果里,不仅包括公交线路,如果该城市有地铁的话,还包括地铁线路。可以自行通过关键词搜索分离出来,这里就不详述了。

工具下载

最后,贴上工具下载地址:

工具下载:BUG-获取高德公交线路=z2bx

更多推荐

ArcGisPro脚本工具【7】——通过高德地图API获取公交线路

本文发布于:2023-06-26 22:12:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/901427.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:过高   公交线路   脚本   地图   工具

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!