1

何時間も壁に頭をぶつけた後、これは [おそらく] 単なるシェル スクリプトの仕事ではないと判断しました。

Google Earth にはバグがあり、KML ファイルの読み込みが非常に遅くなります。新しい Placemark を作成するほぼすべてに対して、2 つの新しい Style が作成され、 の StyleMap で両方の Style が参照され<styleUrl>、次に Placemark で 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-pushpins_ylw- pushpin にも当てはまります。
  • 重複したスタイルを削除してその参照を修正すると (例: s/\<sh_ylw-pushpin\>/s_ylw-pushpin_hl/)、重複したスタイル マップも残るため、重複除去も繰り返す必要があります。

要約すると、XML ファイルから重複するエントリを取り除き (1 つだけ残す)、削除されたエントリのすべての参照を、残ったものに更新する必要があります。

4

1 に答える 1

1

何をしたいのかわかっているようですので、コマンド ライン ツールを使用してこれを行うことをお勧めしますxmlstartlet。プログラムで KML/XML ファイルからエントリを削除できるようです。

参考文献

注: IBM のチュートリアルでは、このツールを として参照していますがxml、単に に置き換えてxmlstarletください。

于 2013-05-24T01:50:39.700 に答える