Search code examples
kmlgoogle-earth

Placemarks lookat range ignored


I'm using this KML file (lets call it load.kml)

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
  <NetworkLink>
    <refreshVisibility>1</refreshVisibility>
    <flyToView>1</flyToView>
    <Link> <href>C:\\Users\\bridenstinek\\workspace\\AlertServlet\\resources\\outboundKML\\test.kml</href>
      <refreshMode>onInterval</refreshMode>
    <refreshInterval>20</refreshInterval>
    </Link>
  </NetworkLink>
</Document>
</kml>

To point Google Earth to a kml file (lets call it test.kml). When I load test.kml regularly (without using load.kml) the range I set works correctly (the zoom level is how I set it).

But when test.kml gets loaded using load.kml the range is incorrect. The placemark zooms in really far and ignores the range I set in the test.kml file.

Is there something overriding the range inside load.kml?

Example of test.kml:

<?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" xmlns:location="http://example.com">
<Document>
    <name>Example</name>

    <Style id="alertKMLStyle">
        <BalloonStyle>
        <text><![CDATA[<center>
  <b><font color="#CC0000" size="+8">$[name]</font></b>
  <br/></center><br/>
  <font size="+2">$[description]</font>
  <br/><br/>
  ]]></text>
        </BalloonStyle>
    </Style>

    <Placemark>
        <name>Example Name</name>
        <description>Example Description</description>
        <LookAt>
            <location:coordinates>800</location:coordinates>
            <longitude>2.294</longitude>
            <latitude>48.858</latitude>
            <altitude>0.5</altitude>
            <heading>12.23742976490019</heading>
            <tilt>0</tilt>
            <range>115718.4889366544</range>
            <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </LookAt>

            <styleUrl>#alertKMLStyle</styleUrl>
            <gx:balloonVisibility>1</gx:balloonVisibility>

            <Point>
                <gx:drawOrder>1</gx:drawOrder>
            <coordinates>2.294,48.858,0</coordinates>
            </Point>

    </Placemark>
</Document>
</kml>

Solution

  • There are a few undocumented differences when you load KML directly as opposed to via a NetworkLink.

    When you load the KML via the NetworLink it looks for a LookAt or Camera in the outermost element which is the Document in test.kml file.

    You can either 1) copy/move the <LookAt> from the Placemark to the parent Document element in test.kml or 2) copy the <LookAt> and insert into the NetworkLink in load.kml and make flyToView=0.

    If the target KML has timestamps then the behavior via Networklinks is different then loading it directly. See related issue.