本次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数据库https://blog.csdn.net/xcc34452366/article/details/128675297?spm=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-获取高德公交线路https://pan.baidu.com/s/1l9tU09Qw8cAvMLygzLut0w?pwd=z2bx

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

  1. android 地铁地图api,利用高德地图api绘制公交+地铁的等时圈

    等时圈是指从某点出发,以某种交通方式在特定时间内能到达的距离覆盖的范围,在可达性分析中十分常见.原本我们需要将地图栅格化不停地调用路径规划api来获得等时圈,现在已经有网站为我们做好了这些工作,比如h ...

  2. java获取经纬度_java调用高德地图api获取某个位置的经纬度

    java调用高德地图api获取经纬度的方法,废话少说,直接上代码: import com.fasterxml.jackson.databind.JsonNode; import com.ning.ht ...

  3. 调用腾讯地图API、高德地图API 获取当前地理位置、经纬度

    调用腾讯地图API.高德地图API 获取当前地理位置.经纬度 web开发中,很多情况下都会需要获取当前位置的经纬度,在网上找了几个不同的地图,最终找到兼容比较好的腾讯地图API 1.调用腾讯地图API ...

  4. 提取某一个镇的行政边界_高德地图api获取行政边界矢量方法

    高德地图api获取行政边界矢量方法 发布时间:2018-09-07 17:51, 浏览次数:2170 , 标签: api 1.获取高德地图web服务key 2.行政区域查询API服务地址: https ...

  5. C#窗体调用地图(高德地图)-实现公交线路查询

    C#窗体调用地图(高德地图)-实现公交线路查询 新建C#工程–创建Windows窗体应用程序 添加WebBrowser控件(用来显示网地图页)可以把滚动条(ScrollBarsEnabled)设置成f ...

  6. python从高德api获取公交线路规划信息

    从高德api获取公交线路规划信息类似于爬虫,由于本人不会爬虫,因此简单说说如何实现 直接上代码 import os import requests import math import json im ...

  7. 利用高德地图API获取任意两座城市之间的距离!异地也有惊喜!

    工作中有时会遇到这样一种场景:年末需要统计所有员工该年的航旅出差情况,然后根据他们的飞行距离补贴一定的交通费.例如如下所示情况: 然而,如果我们使用地图APP等工具逐一进行手工查询,在一家规模稍大的公 ...

  8. html调用高德地图得到城市,高德地图API获取行政区域

    高德地图API提供的行政区划查询,可以获取到行政区域的区号.城市编码.中心点.边界.下辖区域的详细信息.基于该工具进行扩展,对边界数据做转换处理,保存为GeoJson格式文件,方便使用.现已可以单个城 ...

  9. uniapp+高德地图api 获取定位信息及详细地址

    引入高德地图js api 高德地图api官方文档 根据官方文档建议,我使用的是JSAPI Loader 并且是通过npm安装的 npm i @amap/amap-jsapi-loader --save ...

最新文章

  1. 一学就废的三种简单排序【冒泡、插入、选择】
  2. 为什么强烈禁止开发人员使用isSuccess作为变量名
  3. H.264整数DCT公式推导及蝶形算法分析
  4. 前端基础进阶(二):执行上下文详细图解
  5. 学习大数据需要的基础
  6. TensorFlow实践:经典CNN-AlexNet
  7. abaqus2021+vs2018+intel oneAPI2022关联程序
  8. PS可以快速批量修改图片尺寸吗?
  9. 计算机组装内存条安装,笔记本电脑内存条的正确安装方法
  10. 记一次失败的小米前端面试经历
  11. HTML文件自动加入了VBS代码,html病毒:自动注入VBS代码-Ramnit病毒怎么解决!
  12. 浏览器自动转到外国服务器,通过HSTS实现浏览器自动跳转https(非服务器响应跳转)...
  13. 中科院计算机网络信息中心是一种怎样的存在?
  14. com、cn域名到期删除时间
  15. hadoop(hadoop是什么)
  16. vba给服务器发送消息,我如何发送一个HTTP POST请求使用VBA从Excel服务器?我如何发送一个HTTP POST请...
  17. Docker 部署在线文件转换服务--Libre Office Online
  18. 复杂网络上的传播动力学
  19. 一种激光透窗摄像机,可透过玻璃抓拍人脸
  20. 2W字 详解20道Redis经典面试题(珍藏版)

热门文章

  1. 【linux】shell脚本 ps 命令学习
  2. 【Redis】概述以及启动Redis并进入Redis
  3. 记一次笔试遇到leetcode原题却没a出来的经历
  4. 2023年软考高项论文秘籍大讲堂|开篇
  5. 尚硅谷的Netty介绍(一)
  6. 西北大学本科毕业论文答辩PPT模板
  7. seqkit根据基因id_基因家族分析保姆级教程(分子进化)-生信小白自学之路
  8. 量化策略:驾驭交易之轴心点研究(一)
  9. 【亲近自然亲子营】 世外桃源”享受野趣,双山邂逅浪“慢”~旅程
  10. Opengl ES之矩阵变换