【问题标题】:Linking KML balloons链接 KML 气球
【发布时间】:2013-02-27 03:38:31
【问题描述】:

大局:我正在使用 C++ 中的自定义 KML 编写器编写自己的 KML。我有一组共享一些(不是全部)属性的地标。目前,我将共享属性存储为地标所在的父文件夹的属性。这些 KML 可在 Google 地球中查看。

用户可以使用与存储在每个地标/文件夹中的ExtendedData 相关联的 BalloonStyle 来查看这些数据。地标为其独特的数据共享气球样式,当他们在 Google 地球中单击文件夹时,共享的数据会使用父文件夹的气球样式显示。

我无法复制每个地标中的共享数据,这就是我将其存储在父文件夹中的原因。

备选方案 1: 有没有办法在子气球内提供指向父文件夹气球的用户可点击链接?

备选方案 2:是否可以在地标的信息气球中显示另一个地标/特征的数据?

据我所知,这两种选择都是不可能的。

编辑:简化示例代码:

<?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>
        <name>MyKml</name>
        <Style id="Style8">             <!-- style for child point -->
            <BalloonStyle>
                <text>
                Point: $[name]&lt;br/&gt;
                Code: $[code]&lt;br/&gt;
                Number of Points: $[numpts] <!-- Alt2: numpts belongs to the parent - this syntax is obviously wrong -->
                Link to parent: $[parentid] <!-- Alt1: if I can't display the parent's properties, can I at least give a clickable link to it? -->
                </text> 
            </BalloonStyle>
        </Style>
        <Style id="Style12">            <!-- style for parent folder -->
            <BalloonStyle>
                <text>
                Point Group: $[name]&lt;br/&gt;
                Number of Points: $[numpts]
                </text>
            </BalloonStyle>
        </Style>
        <Folder>
            <name>Point Group 1</name>
            <styleUrl>#Style12</styleUrl>
            <ExtendedData>
                <Data name="numpts">
                    <value>4</value>
                </Data>
            </ExtendedData>
            <Placemark>
                <name>PT1</name>
                <styleUrl>#Style8</styleUrl>
                <ExtendedData>
                    <Data name="code">
                        <value>TAT1</value>
                    </Data>
                </ExtendedData>
                <MultiGeometry>
                    <Point>
                        <coordinates>-121,47,110</coordinates>
                    </Point>
                </MultiGeometry>
            </Placemark>
            <Placemark>
                <name>PT2 - PT4</name>
                <styleUrl>#Style8</styleUrl>
                <ExtendedData>
                    <Data name="code">
                        <value>TAT2</value>
                    </Data>
                </ExtendedData>
                <MultiGeometry>
                    <Point>
                        <coordinates>-121.090,47.430,1224</coordinates>
                    </Point>
                    <Point>
                        <coordinates>-121.470,47.621,122</coordinates>
                    </Point>
                    <Point>
                        <coordinates>-121.990,47.121,122</coordinates>
                    </Point>
                </MultiGeometry>
            </Placemark>
        </Folder>
    </Document>
</kml>

【问题讨论】:

标签: kml google-earth kmz


【解决方案1】:

备选方案 1:是否有任何方法可以在子气球内提供指向父文件夹气球的用户可点击链接?

这是使用feature anchors 实现的,您可以在描述/气球中使用&lt;a href="target"&gt; 通过其KML id 引用并链接到地标。如果目标特征具有LookAtCamera 元素,则从指定视点查看特征。

href 可以是片段 URL(即,带有 # 符号后跟 KML 标识符的 URL)。 您还可以使用分号 (;) 和以下限定符之一将操作附加到 URL:

  • ;flyto(默认)- 飞到功能区
  • ;气球 - 打开功能的气球,但不飞到功能
  • ;balloonFlyto - 打开功能的气球并飞向功能

如果您想从该点显示文件夹气球,您可以更新 BalloonStyle 文本如下,并将“id”属性添加到您要引用的文件夹。

<Style id="Style8">
  <BalloonStyle>
    <text>
    <![CDATA[ 
    Point: $[name]<br/>
    Code: $[code]<br/>
    Number of Points: $[numpts]
    <BR><a href="#parent;balloon">Link to parent</a>
    ]]>
    </text> 
  </BalloonStyle>
</Style>
<Folder id="parent"> *** Must add "id" attribute to link to it ***
    ...
</Folder>

备选方案 2:是否可以在地标的信息气球中显示另一个地标/特征的数据?

不能直接在另一个地标的气球中包含另一个地标的元数据,但可以链接到它并通过用户单击链接切换到显示其他地标。

您可以添加指向地标描述的链接,以通过其 id 链接到文件夹的相同方式相互链接,然后将 $[description] 占位符添加到 BalloonStyle 文本。

    <Style id="style9"> <!-- style for child point -->
        <BalloonStyle>
            <text>
            <![CDATA[
            Point: $[name]<br/>
            Code: $[code]<br/>
            <a href="#parent;balloon">Link to parent</a>
            <br>$[description]
            ]]>
            </text>
        </BalloonStyle>
    </Style>
    ...
    <Placemark id="pt1">
        ...
    </Placemark>
    <Placemark id="pt2">
        <name>PT2 - PT4</name>
        <description>
         <![CDATA[
            <a href="#pt1;balloon">Show P1</a><BR>
             ]]>
        </description>
        <styleUrl>#style9</styleUrl>
        ...
    </Placemark>

【讨论】:

  • 谢谢。这或多或少是我最终做的。关于备选方案 2 的任何意见?
  • 谢谢。我不认为有任何方法可以让 Back 按钮返回到上一个气球...?
  • 不。您需要交叉链接来链接地标之间的预定义路径...但没有后退按钮功能 - 可能是包含指向所有地点的链接的目录气球。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多