此文章使用的rtk数据为,ubuntu下利用串口工具cutecom 保存的log文件.
# -*- coding: utf-8 -*-
from os.path import join
import folium as fm
import os
import xlrd
import pandas as pd
import folium
import numpy as np
import requests
import json
import csv
def showmap(root_path,data1):
#认真的程序员可以将数据的处理和地图分成两个函数,但是注意传值的类型
num=data1.__len__()
print(num)
m = fm.Map(location=[38.8291223, 115.4533552],zoom_start=65
# tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}', # 高德街道图
# tiles='http://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', # 高德卫星图
# tiles='https://mt.google.com/vt/lyrs=s&x={x}&y={y}&z={z}', # google 卫星图
# tiles='https://mt.google.com/vt/lyrs=h&x={x}&y={y}&z={z}', # google 地图
# attr='default'
)
'''初始化地图'''
places = []
#针对不同数据,可能需要调试
for i in range(1,num,1):
re1 = data1[i][6]
re2 = data1[i][7]
# print(re1)
places.append([float(re1),float(re2)])
# print(places)
route = folium.PolyLine( #polyline方法为将坐标用线段形式连接起来
places, #将坐标点连接起来
# weight=1000, #线的粗细
color='purple', #线的颜色
# opacity=0.1 #线的透明度
).add_to(m) #将这条线添加到刚才的区域m内
os.chdir(root_path)
m.save("driving_fuxingxilu.log.html") #将结果以HTML形式保存
# '''获取两列中每行的数据,并转化为坐标'''
# fm.Marker(place, popup='<i>Mt. Hood Meadows</i>').add_to(m)
# '''用Marker方法在地图上显示点'''
# m.save('tomapd.html')
# '''此处可以直接写m,显示地图,但是我这里选用了先生成html文件,为了节省时间'''
def Information(data1,root_path):
data1 = np.array(data1)
num=data1.__len__()
for i in range(1,num,1):
re1 = data1[i][6]
re2 = data1[i][7]
# print(re1,re2)
# places.append([float(re1),float(re2)])
url = 'https://restapi.amap.com/v3/geocode/regeo?key=e44f4aea2295e2144d2d1a0358c4cd95&location='+str(re2)+','+str(re1)
# url = 'https://restapi.amap.com/v3/geocode/regeo?key=e44f4aea2295e2144d2d1a0358c4cd95&location=115.3682364,38.9040826'
res = requests.get(str(url))
json_data = json.loads(res.text)
address = json_data['regeocode']['formatted_address']
street = json_data['regeocode']['addressComponent']['streetNumber']['street']
data2 = [data1[i]]+[address]
os.chdir(root_path)
deal(data2,i)
def deal(item,i):
# 保存数据到csv文件
new_item_csv = 'data'
with open('{}.csv'.format(new_item_csv), 'a', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(item)
print(i)
def Datacleaning(root_path):
#认真的程序员可以将数据的处理和地图分成两个函数,但是注意传值的类型
data = os.path.join(root_path,'fuxingxilu.log')
'''将数据导入'''
data1 = []
with open(data, 'r') as file_to_read:
while True:
lines = file_to_read.readline()
if not lines:
break
head = lines[:6]
if head != '$GPFPD':
continue
gps_info_ = [i for i in lines.split(',')]
if len(gps_info_) == 16 and float(gps_info_[2])>123000.760:
data1.append(gps_info_)
data1 = np.array(data1)
return data1
def main():
root_path = '/media/robosense/c4900502-bec1-47cf-a8e2-ec8d00ea207f/2021-03-03/3-3/'
print("运行主函数")
data1=Datacleaning(root_path)
showmap(root_path,data1)
Information(data1,root_path)
if_name='_main_'
main()