我正在阅读 .gpx 文件的正文,需要更改数据的格式,以便可以将其读取为 .kml
.kml 具有lat
和long
.gpx 的交换顺序,因此我需要找到一种方法来连续获取两个子字符串之间的值并在以不同的顺序写入它们之前临时存储它。.kml 也与之分开<time>
,<coords>
但这几乎是相同类型的任务。
我查看了许多资源,包括:
- Python:读取文本文件的一部分,但我不只是在一个值之后,我需要它来处理大量数据点。
- 我也试过元素树。但无法让它飞起来
我试过了
lat = re.search('<trkpt lat="(.*)" lon="', x)
lon = re.search('" lon="(.*)">', x)
这显然不适用于原始文件中的多个值。我的代码可能不是很pythonic(还)。编码:
def convert(fileName):
f = open(fileName, "r")
x = f.read()
x = re.sub(r'<trkpt lat="', ' <gx:coord>', x)
x = re.sub(r'" lon="', ' ', x)
x = re.sub(r'"><ele>', ' ', x)
x = re.sub(r'</ele>', '</gx:coord>\n', x)
x = re.sub(r'<speed>.*?</speed>', '', x)
return x
让我接近所需的格式。但是我不知道如何连续传递多个值,稍微交换它们并逐步重写
我是 python 新手....请发送帮助。谢谢!
编辑
以下是每种文件类型的示例(为清楚起见,我已删除每个文件的标题文本)
.gpx 看起来像这样,并且有时间和坐标并发。如您所见,每个数据点都存在于<trkpt
和之间</trkpt>
(.gpx 也有速度,有时还有其他需要清理的东西):
<trkseg>
<trkpt lat="-33.8598" lon="151.17912"><ele>7.8</ele><speed>0.9013878</speed><time>2012-09-25T07:38:42Z</time></trkpt><trkpt lat="-33.859936" lon="151.17906"><ele>20.8</ele><speed>2.25</speed><time>2012-09-25T07:38:43Z</time></trkpt><trkpt lat="-33.859818" lon="151.17934"><ele>-3.4</ele><speed>1.5</speed><time>2012-09-25T07:38:45Z</time></trkpt>
<trkpt lat="-33.859947" lon="151.17914"><ele>16.2</ele><speed>1.5</speed><time>2012-09-25T07:38:49Z</time></trkpt><trkpt lat="-33.860016" lon="151.1792"><ele>18.0</ele><speed>1.75</speed><time>2012-09-25T07:38:52Z</time></trkpt><trkpt lat="-33.86008" lon="151.17923"><ele>18.4</ele><speed>1.5811388</speed><time>2012-09-25T07:38:57Z</time></trkpt><trkpt lat="-33.86013" lon="151.17932"><ele>18.1</ele><speed>1.75</speed><time>2012-09-25T07:39:03Z</time></trkpt>
好的....这是与<when>
坐标分开的等效 .kml <gx:coords>
。当然,每个人的数量总是相同的。您可以看到海拔(<ele>
在 .gpx 中)是位置数据之后的坐标中未标记的数字。
`
<when>2012-09-25T07:38:42Z</when>
<when>2012-09-25T07:38:43Z</when>
<when>2012-09-25T07:38:45Z</when>
<when>2012-09-25T07:38:49Z</when>
<when>2012-09-25T07:38:52Z</when>
<when>2012-09-25T07:38:57Z</when>
<when>2012-09-25T07:39:03Z</when>
<gx:coord>151.17912 -33.8598 7.8</gx:coord>
<gx:coord>151.17906 -33.859936 20.8</gx:coord>
<gx:coord>151.17934 -33.859818 -3.4</gx:coord>
<gx:coord>151.17914 -33.859947 16.2</gx:coord>
<gx:coord>151.1792 -33.860016 18</gx:coord>
<gx:coord>151.17923 -33.86008 18.4</gx:coord>
<gx:coord>151.17932 -33.86013 18.1</gx:coord>
`