当前位置:   article > 正文

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

爬取高德路况数据

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

1、json文件解读

json文件显示如下:

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

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

2、python代码编写

2.1、json文件读取

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

  1. import json
  2. import os
  3. import pandas as pd
  4. import math
  5. import csv
  6. import arcpy
  7. from arcpy import da
  8. from arcpy import env
  1. ###打开json文件###
  2. with open(jsonfile) as f:
  3. fileread=f.readline()
  4. jsondata=json.loads(fileread)
  5. print(jsondata)
  6. trafficinfo = jsondata['trafficinfo']
  7. for row in trafficinfo['roads']:
  8. name = row['name']
  9. status = row['status']
  10. direction = row['direction']
  11. angle = row['angle']
  12. if "speed" in trafficinfo:
  13. speed = row['speed']
  14. lcodes = row['lcodes']
  15. print ("--------------这里是坐标点的信息------------------------")
  16. points_data = row['polyline']
  17. points_data = points_data.split(";")
  18. #将polyline的坐标点循环遍历取出来
  19. for i in range(1,len(points_data)):
  20. print (i)
  21. print (points_data[i])
  22. oldLon = float(points_data[i].split(",")[0])
  23. oldLat = float(points_data[i].split(",")[1])
  24. lon = gcj02_to_wgs84(oldLon,oldLat)[0]
  25. lat = gcj02_to_wgs84(oldLon,oldLat)[1]
  26. pnt = arcpy.Point(lon,lat)
  27. array.add(pnt)
  28. polyline = arcpy.Polyline(array,cgcs2000project)
  29. array.removeAll()
  30. newFields = [polyline,name,status,direction,angle,speed,lcodes,polyline.length]
  31. cur.insertRow(newFields)
  32. del cur
  33. f.close

2.2、创建shp数据

  1. ###创建shp文件###
  2. print ("创建shp")
  3. #创建一个空白的线要素
  4. arcpy.CreateFeatureclass_management(os.path.dirname(shp_output),os.path.basename(shp_output),'POLYLINE',"","","",cgcs2000project)
  5. #给shp添加字段属性
  6. arcpy.AddField_management(shp_output,'name','Text')
  7. arcpy.AddField_management(shp_output,'status','Text')
  8. arcpy.AddField_management(shp_output,"direction",'Text')
  9. arcpy.AddField_management(shp_output,'angle','Text')
  10. arcpy.AddField_management(shp_output,"speed",'Text')
  11. arcpy.AddField_management(shp_output,"lcodes",'Text')
  12. arcpy.AddField_management(shp_output,"Length",'Double')
  13. fields =['SHAPE@',"name", "status", "direction", "angle", "speed", "lcodes",'Length']
  14. #插入行
  15. cur = da.InsertCursor(shp_output,fields)

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

2.3、坐标转换

由于高德数据是火星坐标系,我们需要对坐标点进行坐标系转换,将火星坐标系转为CGCS2000坐标系,转换代码在这:https://download.csdn.net/download/THEDEAMON/88807818?spm=1001.2014.3001.5503

3、转换后效果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/474074
推荐阅读
相关标签
  

闽ICP备14008679号