arcpy高德爬取路况信息数据json转shp

最近工作上遇到爬取的高德路况信息数据需要在地图上展示出来,由于json数据不具备直接可视化的能力,又联想到前两个月学习了一点点arcpy的知识,就花了一些时间去写了个代码,毕竟手动处理要了老命了。

1、json文件解读

json文件显示如下:

通过api和json组织结构解读,我们只需要道路的polyline坐标点空间信息,道路名称,道路方向、道路限速和道路拥堵程度等属性信息。

所以我们需要用python代码去获取roads数组内的信息

2、python代码编写

2.1、json文件读取

读取json文件需要线导入json模块,根据需要,我们还导入了arcpy等模块

import json
import os
import pandas as pd
import math
import csv
import arcpy
from arcpy import da
from arcpy import env
###打开json文件###
with open(jsonfile) as f:
    fileread=f.readline()
    jsondata=json.loads(fileread)
    print(jsondata)
    trafficinfo = jsondata['trafficinfo']
    for row in trafficinfo['roads']:
        name = row['name']
        status = row['status']
        direction = row['direction']
        angle = row['angle']
        if "speed" in trafficinfo:
            speed = row['speed']
        lcodes = row['lcodes']
        print ("--------------这里是坐标点的信息------------------------")
        points_data = row['polyline']
        points_data = points_data.split(";")
        #将polyline的坐标点循环遍历取出来
        for i in range(1,len(points_data)):
            print (i)
            print (points_data[i])
            oldLon = float(points_data[i].split(",")[0])
            oldLat = float(points_data[i].split(",")[1])
            lon = gcj02_to_wgs84(oldLon,oldLat)[0]
            lat = gcj02_to_wgs84(oldLon,oldLat)[1]
            pnt = arcpy.Point(lon,lat)
            array.add(pnt)
        polyline = arcpy.Polyline(array,cgcs2000project)
        array.removeAll()
        newFields = [polyline,name,status,direction,angle,speed,lcodes,polyline.length]
        cur.insertRow(newFields)
    del cur    
    f.close

2.2、创建shp数据

###创建shp文件###
print ("创建shp")
#创建一个空白的线要素
arcpy.CreateFeatureclass_management(os.path.dirname(shp_output),os.path.basename(shp_output),'POLYLINE',"","","",cgcs2000project)
#给shp添加字段属性
arcpy.AddField_management(shp_output,'name','Text')
arcpy.AddField_management(shp_output,'status','Text')
arcpy.AddField_management(shp_output,"direction",'Text')
arcpy.AddField_management(shp_output,'angle','Text')
arcpy.AddField_management(shp_output,"speed",'Text')
arcpy.AddField_management(shp_output,"lcodes",'Text')
arcpy.AddField_management(shp_output,"Length",'Double')
fields =['SHAPE@',"name", "status", "direction", "angle", "speed", "lcodes",'Length']
#插入行
cur = da.InsertCursor(shp_output,fields)

其中outputpath 是输出文件夹路径,
jsonfile是json文件路径
shp_output是输出的文件名称
cgcs2000project是坐标参照

2.3、坐标转换

由于高德数据是火星坐标系,我们需要对坐标点进行坐标系转换,将火星坐标系转为CGCS2000坐标系,转换代码在这:

3、转换后效果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

编程实例分享,物流车辆调度管理系统软件教程

编程实例分享,物流车辆调度管理系统软件教程 一、前言 以下教程以 佳易王物流车辆调度管理系统软件V16.0为例说明 如上图,左侧为 导航栏,在系统设置里可以设置打印参数 如上图,填写托运方,货物,司机等信…

走进施耐德电气:数字化转型要奉行长期主义

数字化不是新“银弹”,其前身是电子化、信息化,至今已走过几十年的历程。回头来看,在这个人人都谈数字化、家家都在数字化转型的时代,影响数字化真正走深向实的核心因素有哪些? 2024年1月16日,在主题为“如…

c语言--assert断言(详解)

目录 一、断言的概念二、assert断言2.1 代码12.1.1运行结果2.1.2分析 2.2代码22.2.1运行结果2.2.2分析2.3代码32.3.1运行结果及其分析 三、优点四、缺点五、注意 一、断言的概念 assert.h 头⽂件定义了宏 assert() ,用于在运行时确保程序符合指定条件,如…

vue基本语法总结大全

vue基本语法 文章目录 vue基本语法基本用法内容渲染指令属性绑定指令使用js表达式事件绑定指令条件渲染指令v-else和v-else-if指令列表渲染指令v-for中的key 组件化开发安装详细讲解 第三方组件1. 组件间的传值2. element-ui介绍3. 组件的使用4. 图标的使用 Axios网络请求1. Ax…

Redis渗透SSRF的利用

Redis是什么? Redis是NoSQL数据库之一,它使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库。默认端口是:6379 工具安装 下载地址: http://download.redis.io/redis-stable.tar.gz然…

【Redis】字符串原理--简单动态字符串SDS

一.SDS定义 free 属性值为0,标识SDS没有分配任何未使用空间。len 属性值为5,标识SDS保存了一个5字节长度的字符串。buf 属性是一个char类型数组,数组的前5个字节保存了,R e d i s 五个字符,最后一个保存空字符串 \0…

网络原理TCP/IP(5)

文章目录 IP协议IP协议报头地址管理网段划分特殊的IP地址路由选择以太网认识MAC地址对比理解MAC地址和IP地址DNS(域名服务器) IP协议 IP协议主要完成的工作是两方面: 地址管理,使用一套地址体系,来描述互联网上每个设…

Springboot集成Camunda并完成一条流程实例

💖专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据,完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧😘 💖设计流程定…

测试开发体系

软件测试 通过手工或者工具对 “被测对象”进行测试验证实际结果与预期结果之间是否存在差异 软件测试作用 通过测试工作可以发现并修复软件当中存在的缺陷,从而提高用户对产品的使用信心测试可以降低同类型产品开发遇到问题的风险 软件缺陷 软件缺陷被测试工程…

船舶维保管理:Java与SpringBoot的完美结合

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Linux openKylin(开放麒麟)系统SSH服务安装配置与公网远程连接

文章目录 前言1. 安装SSH服务2. 本地SSH连接测试3. openKylin安装Cpolar4. 配置 SSH公网地址5. 公网远程SSH连接6. 固定SSH公网地址7. SSH固定地址连接8. 结语 前言 openKylin是中国首个基于Linux 的桌面操作系统开发者平台,通过开放操作系统源代码的方式&#xff…

在工业制造方面,如何更好地实现数字化转型?

实现工业制造的数字化转型涉及利用数字技术来增强流程、提高效率并推动创新。以下是工业制造领域更好实现数字化转型的几个关键步骤: 1.定义明确的目标: 清楚地概述您的数字化转型目标。确定需要改进的领域,例如运营效率、产品质量或供应链…

【vue ezuikit-js】5分钟实现萤石视频放大对焦和缩小对焦

实现功能如上图:点击+按钮,实现画面放大并对焦;点击-,实现画面缩小并对焦。 官网上提供了电子放大的控制按钮和接口,但是只是把当前画面进行放大,并没有对焦,画面模糊。 萤石官方还提供了对焦的接口,根据传入的参数不同,可以实现放大对焦和缩小对焦。但是注意此接口是…

【Matplotlib】figure方法 你真的会了吗!?

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:matplotlib 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

mysql项目实战,常用sql语句的实战笔记

1.使用sql语句对数据库进行创建 //创建实验用的数据库 CREATE DATABASE jsschool;//使用当前数据库 USE jsschool;//创建学生表 CREATE TABLE student (sno VARCHAR(20) PRIMARY KEY COMMENT 学生编号,sname VARCHAR(20) NOT NULL COMMENT 学生姓名,ssex VARCHAR(10) NOT NULL…

基于Java超市管理系统设计与实现(源码+部署文档)

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…

c++入门学习④——对象的初始化和清理

目录 对象的初始化和清理: why? 如何进行初始化和清理呢? 使用构造函数和析构函数​编辑 构造函数语法: 析构函数语法: 构造函数的分类: 两种分类方式: 三种调用方法: 括号法(默认构造函数调用&…

sql非查询知识点(增删改-crud没有r)

1.建库 create database database_name 2.使用该数据库 use database_name 3.建表 3.1普通建表 create table if not exists actor(actor_id smallint(5) not null primary key comment "主键id",first_name varchar(45) not null comment "名字",last…

Python中的while循环,知其然知其所以然

文章目录 while循环结构1.用循环打印1 ~ 100步骤解析2. 1 ~ 100的累加和3.死循环1. 用死循环的方法实现 1 ~ 100累加和 4. 单向循环(1)打印 一行十个小星星*(2)通过打印一个变量的形式,展现一行十个小星星(3)一行十个换色的星星 ★☆★☆★☆★☆★☆(4)用一个循环,打印十行十列…

重写Sylar基于协程的服务器(7、TcpServer HttpServer的设计与实现)

重写Sylar基于协程的服务器(7、TcpServer & HttpServer的设计与实现) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务…