我正在使用一个KML文件,我用它来在谷歌地球内绘制线串。我正在从 USB 适配器接收 GPS 数据,并将坐标馈送到 Go 频道。我正在尝试读取通道并更新KML文件中的节点以添加到线弦中(从而绘制我的移动)。
以下是 KML 结构:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Folder>
<name>Foo</name>
<open>1</open>
<Document>
<name>Bar</name>
<Placemark>
<Style>
<LineStyle>
<color>ff00ff00</color>
<width>5</width>
</LineStyle>
<PolyStyle>
<color>ff4080ff</color>
<fill>1</fill>
<outline>1</outline>
</PolyStyle>
</Style>
<LineString>
<tessellate>1</tessellate>
<coordinates>
1.23411166666667,10.12345678901234,0
1.23421166666667,10.12345678901234,0
1.23431166666667,10.12345678901234,0
1.23431166666667,10.32345678901234,0
</coordinates>
</LineString>
</Placemark>
</Document>
</Folder>
</kml>
我希望追加到坐标节点。
我在想两种方法之一。首先解析文件并使用正则表达式查找并插入数据。其次,解析 XML 并查找更新节点中的值。后者似乎是更明智的选择,但是我在Google上搜索的所有内容都向我展示了如何将新节点添加到XML树中,而不是附加到现有条目中。</coordinates>
到目前为止,我所尝试的感觉就像一团糟,每次从频道读取时都低效地打开文件,最终不起作用。
type LineString struct {
coordinates string `xml:"coordinates"`
}
func plotLocation(c chan data.GpsPos) {
/*
continuously read from the channel
use the location data to plot a breadcrumb trail
*/
defer wg.Done()
for currentCoords := range c {
file, err := os.Open("/Users/me/foo.kml")
if err != nil {
log.Fatal(err)
}
我是否做了一些明显错误的事情,是否有更好的方法将这些数据写入文件(每秒钟左右发生一次)?
慕沐林林
相关分类