KML файлът в Google Земя показва името на заместващия обект

Имам въпрос, отнасящ се до урока за BalloonStyle в документацията за KML: Документация за BalloonStyle

Играя си с този 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 Earth показва замяната на обекта от шаблона за балон. Например премахвате реда <SimpleData name="ElevationGain">10000</SimpleData>, който се показва в балона като „Изкачването е $[TrailHeadType/ElevationGain] метра.“ Което не изглежда много хубаво.

Някаква идея как да кажете на Google Earth, че не трябва да показва линията от балона, ако има липсващ SimpleData?

Благодаря предварително


person berkley    schedule 28.08.2013    source източник


Отговори (2)


Не мисля*, ​​че можете да направите това, което питате тук - т.е. да приложите условна логика в този стил на текст. Имах подобно изискване в миналото (определени части от данни липсваха в някои от моите показалци) и в крайна сметка приложих различни стилове за всеки от възможните сценарии на липсваща информация при генерирането на 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> 
person Matthew    schedule 28.08.2013
comment
Благодаря за този отговор... ;) - person berkley; 01.09.2013

Тъй като данните ми се променят по някакъв начин доста често, сега предоставям xml файл, свързан с css файл, и го вграждам като 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>
person berkley    schedule 01.09.2013