我使用.NET XmlSerializer类来反序列化GPX文件.
GPX标准有两个版本:
此外,某些GPX文件未指定默认命名空间:
我的代码需要处理所有三种情况,但我无法弄清楚如何让XmlSerializer这样做.
我确信必须有一个简单的解决方案,因为这是一个常见的场景,例如KML有同样的问题.
我在学习 Python 时正在学习本教程(https://towardsdatascience.com/how-tracking-apps-analysis-your-gps-data-a-hands-on-tutorial-in-python-756d4db6715d)。
我正处于要绘制“时间”和“海拔”的步骤。但是当我这样做时:
plt.plot(df['time'], df['ele'])
plt.show()
Run Code Online (Sandbox Code Playgroud)
我收到错误“'NoneType' 对象没有属性 'offset'”。如果我绘制“经度”和“纬度”,一切正常。我自己找不到解决这个问题的方法。到目前为止,这是“我的”代码:
import gpxpy
import matplotlib.pyplot as plt
import datetime
from geopy import distance
from math import sqrt, floor
import numpy as np
import pandas as pd
import chart_studio.plotly as py
import plotly.graph_objects as go
import haversine
#Import Plugins
gpx_file = open('01_Karlsruhe_Schluchsee.gpx', 'r')
gpx = gpxpy.parse(gpx_file)
data = gpx.tracks[0].segments[0].points
## Start Position
start = data[0]
## End Position
finish = data[-1]
df = pd.DataFrame(columns=['lon', 'lat', 'ele', 'time'])
for point in …
Run Code Online (Sandbox Code Playgroud) 当GPX文件具有以下简单结构时,我能够<trkpt></trkpt>
通过xpath表达式访问节点<xsl:for-each select='gpx/trk/trkseg/trkpt'>
:
<gpx>
<trk>
<trkseg>
<trkpt lat="50.5324906" lon="7.0842605">
<ele>105.8824463</ele>
<time>2010-07-11T08:50:16Z</time>
</trkpt>
<trkpt lat="50.5323745" lon="7.0843524">
<ele>108.7662354</ele>
<time>2010-07-11T08:50:44Z</time>
</trkpt>
...
</trkseg>
</trk>
</gpx>
Run Code Online (Sandbox Code Playgroud)
如何在涉及名称空间时实现相同的效果,例如:
<gpx xmlns="http://www.topografix.com/GPX/1/1"
creator="MapSource 6.15.11"
version="1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1
http://www.topografix.com/GPX/1/1/gpx.xsd">
Run Code Online (Sandbox Code Playgroud) 我做了一个.gpx文件来在IOS模拟器上模拟路线,现在我想模拟水平精度我该怎么做?
如下是我的.gpx文件的摘录:
<?xml version="1.0"?>
<gpx>
<wpt lat="-23.772830" lon="-46.689820"/> //how add horizontal accuracy 7 meters for example
<wpt lat="-23.774450" lon="-46.692570"/> //and here horizontal accuracy of 2 metters for example
<wpt lat="-23.773450" lon="-46.693530"/> //and here 19 meters
</gpx>
Run Code Online (Sandbox Code Playgroud)
如果我运行所有gps点返回的水平精度为5米,则可以更改此设置。
我要赶一个GPSException被抛出gpxpy库.
try:
gpx = gpxpy.parse(open(filepath))
except GPXException:
print "GPXException for %s." % filepath
Run Code Online (Sandbox Code Playgroud)
由于我是Python的新手,我不明白如何通过命名空间引用异常,例如gpxpy.gpx.GPSException
或者导入语句.
import gpxpy
import gpxpy.gpx
import gpxpy.gpx.GPSException
Run Code Online (Sandbox Code Playgroud) 我试图分析GPS收集数据的每一点的速度.我正在使用gpxpy,我已经从gpx文件中打印出一些内容,如最大速度,开始和结束时间,移动时间等,但我不知道如何打印速度,lat,long等等每一点.我拥有的gpx文件有462分,我想了解更多关于每一点的信息.我的代码如下:
def print_gpx_part_info(gpx_part, indentation=' '):
"""
gpx_part may be a track or segment.
"""
length_2d = gpx_part.length_2d()
length_3d = gpx_part.length_3d()
moving_time, stopped_time, moving_distance, stopped_distance, max_speed = gpx_part.get_moving_data()
print('%sTotal Moving time: (hr/min/sec) %s' % (indentation, format_time(moving_time)))
#print('%sStopped distance: %sm' % stopped_distance)
#print('%sMax speed: %sm/s = %skph' % (indentation, max_speed, max_speed * 60. ** 2 / 1000. if max_speed else 0))
print('%sMax speed: %smph' % (indentation, max_speed * 2.3694 if max_speed else 0))
start_time, end_time = gpx_part.get_time_bounds()
print('%sStarted: %s' % (indentation, start_time)) …
Run Code Online (Sandbox Code Playgroud) 我有一个问题,我已经尝试解决两天了,但找不到解决它所需的信息。
我想要做的是从 .gpx 文件中获取 lat、lon 和 ele 值并将它们放入表中。
我制作了页面让用户将 gpx 文件上传到服务器上。然后,我创建一个名为一、二、三等的新表,数据库中的下一个数字称为“vluchten”。
该表包含 lat、lon 和 ele 字段,全部都是双精度数。
现在,我需要打开用户可能上传的任何 .gpx 文件,并将纬度、经度和坐标提取到我的表中。
我已经研究过使用 php 文件系统函数(fopen、fseek 等),但它们似乎对我的需求没有用处。我还尝试将其作为 XML 读取,但这也不起作用(也许我犯了错误)。
非常欢迎任何关于如何从 .gpx 文件中获取值并将它们放入数据库表中的建议!PHP 页面将接收 lat、lon 和 ele 需要进入的表名称$_POST['name']
。
简而言之,我的问题是:如何从 .gpx 中取出 lon、lat 和 ele 并使用 SQL 将它们放入表中?
我正在关注斯坦福大学iOS讲座中的Trax应用程序演示,教师将应用程序设置为通过AirDrop处理GPX文件,但iPhone模拟器不支持AirDrop.
反正有没有将文件(更具体地说是GPX文件)添加到iPhone模拟器上的应用程序?我想过给自己发电子邮件并在模拟器上使用Safari,但我不知道它将存储在哪里或如何从Trax应用程序访问它.
我正在尝试定义GPX文档类型,以便可以从其他应用程序打开gpx文件类型。在此主题下,我一直关注Apple的技术问答。
我还尝试过发现直接编辑plist文件的解决方案。他们都没有工作。当我尝试打开gpx文件时,在“打开方式”菜单中仍然看不到我的应用程序。我很确定我在这里错过了一些东西。我只是不知道那是什么。请帮忙。
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.xml</string>
</array>
<key>UTTypeDescription</key>
<string>GPS Exchange Format (GPX)</string>
<key>UTTypeIdentifier</key>
<string>com.topografix.gpx</string>
<key>UTTypeReferenceURL</key>
<string>http://www.topografix.com/GPX/1/1</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>gpx</string>
</array>
<key>public.mime-type</key>
<string>application/gpx+xml</string>
</dict>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud) 例如,我可能有一些这样的信息:
<trkpt lat="-33.8161780" lon="150.8710320">
<ele>73.0</ele>
<time>2017-07-08T22:05:45Z</time>
<extensions>
<power>0</power>
<gpxtpx:TrackPointExtension>
<gpxtpx:atemp>7</gpxtpx:atemp>
<gpxtpx:hr>115</gpxtpx:hr>
<gpxtpx:cad>27</gpxtpx:cad>
</gpxtpx:TrackPointExtension>
</extensions>
</trkpt>
Run Code Online (Sandbox Code Playgroud)
我如何根据这些信息计算速度?我使用 python etree 模块来解析文件,并将所有信息存储在 pandas 数据库中。
有人提到我可能应该显示 pandas 数据框。它看起来像这样:
longitude latitude ele temp
time
2017-07-08 22:05:45 150.8710320 -33.8161780 73.0 7
2017-07-08 22:05:46 150.8710350 -33.8161500 73.0 7
2017-07-08 22:05:47 150.8710440 -33.8161170 73.0 7
2017-07-08 22:05:48 150.8710540 -33.8160820 73.0 7
2017-07-08 22:05:49 150.8710690 -33.8160430 73.0 7
Run Code Online (Sandbox Code Playgroud)
等等。