当前位置: 首页 > article >正文

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、转换后效果


http://www.kler.cn/a/228303.html

相关文章:

  • Java学习笔记(二十四)
  • springboot基于微信小程序的商城系统
  • 数学规划问题2 .有代码(非线性规划模型,最大最小化模型,多目标规划模型)
  • 2000-2010年各省第三产业就业人数数据
  • Bigemap pro批量设置属性/填充字段
  • Java 8 实战 书籍知识点散记
  • 关于如何将Excel转成Word,可能有一些你想知道的技巧
  • Linux内存管理:(十二)Linux 5.0内核新增的反碎片优化
  • STM32单片机的基本原理与应用(六)
  • 阿里巴巴 Java 开发手册
  • Leetcode 3031. Minimum Time to Revert Word to Initial State II
  • DBA的节前紧急任务:一份全面的数据库自救指南
  • kubeadm部署k8s集群
  • Android BitmapShader setLocalMatrix缩放Bitmap高度重新onMeasure,Kotlin
  • 【教程】微服务使用Feign接口进行远程调用的步骤
  • 【分布式】雪花算法学习笔记
  • 从零开始 TensorRT(4)命令行工具篇:trtexec 基本功能
  • react和antd学习笔记
  • STM32--揭秘中断(简易土货版)
  • Qt 范例阅读: QStateMachine状态机框架 和 SCXML 引擎简单记录(方便后续有需求能想到这两个东西)
  • k8s学习-数据管理
  • Jmeter 01 -概述线程组
  • windows下docker的使用
  • STM32—系统定时器
  • 炸裂!可视化大模型内部架构的实用工具!
  • C#,雅各布斯塔尔—卢卡斯(Jacobsthal Lucas Number)的算法与源代码