python - 在 Python 中计算 GPS 数据的平均值和归一化
问题描述
我有一个带有 gps 坐标的 json 数据集:
"utc_date_and_time":"2021-06-05 13:54:34", # timestamp
"hdg":"018.0", # heading
"sog":"000.0", # speed
"lat":"5905.3262N", # latitude
"lon":"00554.2433E" # longitude
这些数据将被导入数据库,每个“容器”每秒都有一个条目。正如您可以想象的那样,这是提供我不需要的准确度的大量数据。
我的目标:
- 每 X 秒在数据库中创建一个新条目
- 如果我将 X 设置为 60(一分钟)并且在此期间缺少 10 个条目,则应使用 50 个条目。某些时期的数据可能会丢失,我不希望这会造成虚假头寸。
- 使用期间最后一个条目的时间戳。
- 使用在此期间出现次数最多的标题 (hdg)。
- 计算这段时间内的平均速度。
- 纬度和经度可以使用最后一个条目,但我已经看到需要过滤掉的“尖峰”,或者使用平均值,并删除差异太大的值。
我的脚本现在通过一个 for 循环将所有数据推送到数据库,其中包含不同的数据检查,这正在工作。我是 python 新手,每天仍然通过阅读和 youtube 视频学习,但如果有人能指出我如何实现上述目标的正确方向,那就太好了。
截至目前,数据已导入字典。我想知道是否创建一个以时间戳为关键的字典是要走的路,但我有点迷茫。
代码:
import os
import json
from pathlib import Path
from datetime import datetime, timedelta, date
def generator(data):
for entry in data:
yield entry
data = json.load(open("5_gps_2021-06-05T141524.1397180000.json"))["gps_data"]
gps_count = len(data)
start_time = None
new_gps = list()
tempdata = list()
seconds = 60
i = 0
for entry in generator(data):
i = i+1
if start_time == None:
start_time = datetime.fromisoformat(entry['utc_date_and_time'])
# TODO: Filter out values with too much deviation
tempdata.append(entry)
elapsed = (datetime.fromisoformat(entry['utc_date_and_time']) - start_time).total_seconds()
if (elapsed >= seconds) or (i == gps_count):
# TODO: Calculate average values etc. instead of using last
new_gps.append(tempdata)
tempdata = []
start_time = None
print("GPS count before:" + str(gps_count))
print("GPS count after:" + str(len(new_gps)))
输出:
GPS count before:1186
GPS count after:20
解决方案
推荐阅读
- ios - iOS:UI 对象是否可以在没有故事板自动布局的情况下尊重安全区域?
- git - 如何为 xml 文件设置 git merge / git pull?
- postgresql - PostGIS 和与 QGIS 的连接问题?
- java - Java PhantomReference 与 finalize()
- bash - 如何使用选项远程执行 bash 脚本?
- javascript - Highcharts xrange 拒绝遵循 HOVER 或 SCROLLBAR 行为
- ios - iphone & ipad textarea 字体不呈现某些字符
- reactjs - React 简单的全局实体缓存而不是 Flux/React/etc
- mysql - mysql - 如何强制更改内部连接的评估顺序?
- r - purrr 替换拆分、应用、输出嵌套列