【问题标题】:KML file in Google Earth shows name of entity replacementGoogle 地球中的 KML 文件显示实体替换的名称
【发布时间】:2013-08-31 22:51:04
【问题描述】:

我有一个关于 KML 文档中的 BalloonStyle 教程的问题: BalloonStyle Documentation

玩弄这个 KML 文件:

<kml xmlns="http://www.opengis.net/kml/2.2"> 
<Document>   
  <name>ExtendedData+SchemaData</name>   
  <open>1</open>    
  <!-- Create a balloon template referring to the user-defined type -->
  <Style id="trailhead-balloon-template">     
    <BalloonStyle>       
      <text>
        <![CDATA[         
          <h2>My favorite trails!</h2>         
          <br/><br/>         
          The $[TrailHeadType/TrailHeadName/displayName] is <i>$[TrailHeadType/TrailHeadName]</i>.        
          The trail is $[TrailHeadType/TrailLength] miles.         <br/>        
          The climb is $[TrailHeadType/ElevationGain] meters.         <br/><br/>       
        ]]>
      </text>     
    </BalloonStyle>
  </Style>     

  <!-- Declare the type "TrailHeadType" with 3 fields -->
  <Schema name="TrailHeadType" id="TrailHeadTypeId">     
    <SimpleField type="string" name="TrailHeadName">       
      <displayName><![CDATA[<b>Trail Head Name</b>]]></displayName>     
    </SimpleField>     
    <SimpleField type="double" name="TrailLength">       
      <displayName><![CDATA[<i>The length in miles</i>]]></displayName>     
    </SimpleField>     
    <SimpleField type="int" name="ElevationGain">       
      <displayName><![CDATA[<i>change in altitude</i>]]></displayName>     
    </SimpleField>   
  </Schema>       

  <!-- Instantiate some Placemarks extended with TrailHeadType fields -->    
  <Placemark>     
    <name>Easy trail</name>     
    <styleUrl>#trailhead-balloon-template</styleUrl>     
    <ExtendedData>       
      <SchemaData schemaUrl="#TrailHeadTypeId">        
        <SimpleData name="TrailHeadName">Pi in the sky</SimpleData>         
        <SimpleData name="TrailLength">3.14159</SimpleData>         
        <SimpleData name="ElevationGain">10</SimpleData>       
      </SchemaData>     
    </ExtendedData>     
    <Point>       
      <coordinates>-122.000,37.002</coordinates>     
    </Point>   
  </Placemark>    
  <Placemark>     
    <name>Difficult trail</name>     
    <styleUrl>#trailhead-balloon-template</styleUrl>     
    <ExtendedData>
      <SchemaData schemaUrl="#TrailHeadTypeId">         
        <SimpleData name="TrailHeadName">Mount Everest</SimpleData>        
        <SimpleData name="TrailLength">347.45</SimpleData>         
        <SimpleData name="ElevationGain">10000</SimpleData>       
      </SchemaData>    
    </ExtendedData>    
    <Point>       
      <coordinates>-121.998,37.0078</coordinates>     
    </Point>   
  </Placemark>   
</Document> 
</kml>

当您删除其中一个 SimpleData 元素时,Google 地球会显示气球模板中的实体替换。例如,您删除行 &lt;SimpleData name="ElevationGain"&gt;10000&lt;/SimpleData&gt; 它在气球中显示为“爬升是 $[TrailHeadType/ElevationGain] 米”。这看起来不太好。

知道如何告诉 Google 地球,如果缺少 SimpleData,它不应该显示气球中的线吗?

提前致谢

【问题讨论】:

    标签: kml google-earth


    【解决方案1】:

    我不认为*您可以在这里做您所要求的 - 即在此样式文本中应用条件逻辑。过去我也有类似的要求(我的一些地标中缺少某些数据),我最终在生成 KML 时为每种可能的丢失信息场景应用了不同的样式。

    感觉既非常笨重,而且如果您有大量的场景,即一件或多件物品丢失而其他物品存在,它很快就会变得一团糟。

    *会错的。

    更新

    刚刚查看了我的代码,实际上我最终将所有文本放在了架构的地标字段中,并在我没有数据时打印出空节点 - 也不太优雅,但不需要额外的样式到底。根据您的示例,例如:

    <BalloonStyle>       
      <text>
        <![CDATA[         
          <h2>My favorite trails!</h2>         
          $[TrailHeadType/TrailHeadName/displayName] 
          $[TrailHeadType/TrailLengthBalloonText]               
          $[TrailHeadType/ElevationGainBalloonText]              
        ]]>
      </text>     
    </BalloonStyle>
    
    <Placemark>     
     <name>Difficult trail</name>     
     <styleUrl>#trailhead-balloon-template</styleUrl>     
     <ExtendedData>
      <SchemaData schemaUrl="#TrailHeadTypeId">         
        <SimpleData name="TrailHeadName">Mount Everest</SimpleData>        
        <SimpleData name="TrailLength">347.45</SimpleData>         
        <SimpleData name="ElevationGain">10000</SimpleData> 
    
        <SimpleData name="TrailHeadNameBalloonText"><![CDATA[The trail name is Mount Everest</br>]]></SimpleData>        
        <SimpleData name="TrailLengthBalloonText"><![CDATA[The trail is 347.45 miles.</br>]]></SimpleData>         
        <SimpleData name="ElevationGainBalloonText"><![CDATA[The climb is 10000 meters.</br>]]></SimpleData> 
      </SchemaData>    
     </ExtendedData>    
     <Point>       
      <coordinates>-121.998,37.0078</coordinates>     
     </Point>   
    </Placemark>   
    

    然后,当您没有数据时,您将该项目留空:

    <Placemark>     
     <name>Difficult trail</name>     
     <styleUrl>#trailhead-balloon-template</styleUrl>     
     <ExtendedData>
      <SchemaData schemaUrl="#TrailHeadTypeId">         
        <SimpleData name="TrailHeadName">Mount Everest</SimpleData>        
        <SimpleData name="TrailLength">347.45</SimpleData>         
        <SimpleData name="ElevationGain">10000</SimpleData> 
    
        <SimpleData name="TrailHeadNameBalloonText"><![CDATA[The trail name is Mount Everest</br>]]></SimpleData>        
        <SimpleData name="TrailLengthBalloonText"></SimpleData>         
        <SimpleData name="ElevationGainBalloonText"></SimpleData> 
      </SchemaData>    
     </ExtendedData>    
     <Point>       
      <coordinates>-121.998,37.0078</coordinates>     
     </Point>   
    </Placemark> 
    

    【讨论】:

    • 感谢您的回答... ;)
    【解决方案2】:

    由于我的数据经常以某种方式发生变化,我现在提供一个链接到 css 文件的 xml 文件,并将其作为 iframe 嵌入到描述中。对于离线使用,创建一个kmz并将xml和css放入其中。

    看这里的小教程: http://www.w3schools.com/xml/xml_display.asp

    在kml中,如下所示:

    <description>
        <![CDATA[
            <iframe src="http://www.w3schools.com/xml/cd_catalog_with_css.xml"></iframe>
        ]]>
    </description>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-19
      • 2012-11-23
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多