经过几个小时的努力,我决定这 [可能] 不是单纯的 shell 脚本的工作。
Google 地球上有一个错误,导致加载 KML 文件非常缓慢:对于您创建的几乎每个新地标,它都会创建 2 个新样式,在 中的 StyleMap 上引用这两个样式<styleUrl>
,然后在地标上引用 StyleMap:
<?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">
<Document>
<StyleMap id="m_ylw-pushpin">
<Pair>
<key>normal</key>
<styleUrl>#s_ylw-pushpin</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#s_ylw-pushpin_hl</styleUrl>
</Pair>
</StyleMap>
<Style id="s_ylw-pushpin">
<IconStyle>
<scale>1.1</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
</Icon>
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
</IconStyle>
</Style>
<Style id="s_ylw-pushpin_hl">
<IconStyle>
<scale>1.3</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
</Icon>
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
</IconStyle>
</Style>
<StyleMap id="msn_ylw-pushpin">
<Pair>
<key>normal</key>
<styleUrl>#sn_ylw-pushpin</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#sh_ylw-pushpin</styleUrl>
</Pair>
</StyleMap>
<Style id="sn_ylw-pushpin">
<IconStyle>
<scale>1.1</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
</Icon>
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
</IconStyle>
</Style>
<Style id="sh_ylw-pushpin">
<IconStyle>
<scale>1.3</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
</Icon>
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
</IconStyle>
</Style>
<Placemark>
<LookAt>
<altitude>0</altitude>
<tilt>0</tilt>
<gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
</LookAt>
<styleUrl>#m_ylw-pushpin</styleUrl>
<Point>
<gx:drawOrder>1</gx:drawOrder>
</Point>
</Placemark>
<Placemark>
<LookAt>
<altitude>1</altitude>
<tilt>0</tilt>
<gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
</LookAt>
<styleUrl>#msn_ylw-pushpin</styleUrl>
<Point>
<gx:drawOrder>0</gx:drawOrder>
</Point>
</Placemark>
</Document>
</kml>
- sh_ylw-pushpin和s_ylw-pushpin_hl是重复的条目,只是名称 (id) 不同。每个都在不同的 StyleMap 上引用。这同样适用于sn_ylw-pushpin和s_ylw-pushpin。
- 如果我们删除重复的 Styles 并修复它们的引用(例如
s/\<sh_ylw-pushpin\>/s_ylw-pushpin_hl/
),我们也会留下重复的 StyleMaps,所以我们也应该对它们重复重复数据删除。
总而言之,我需要从 XML 文件中删除重复的条目(只留下一个),并将已删除条目的所有引用更新为留下的条目。