Question

I have several hundred placemarks that are all in one folder. I'm trying to make the labels appear only below a certain altitude. (The placemarks were created by exporting a layer from ArcGIS, and I presume that the altitude should be specified in the units used by the coordinate system of the layer, in this case, in feet; correct me if I'm wrong.) However, nothing I do with the <Region> tag seems to work; the labels happily appear at all altitudes. Here is the code that I'm using; can anyone tell what is wrong with it?

<Document id="DocumentName">
  <name>NameGoesHere</name>
  <Snippet></Snippet>
  <Folder id="NameOfTheFolder">
    <name>NameGoesHere</name>
      <Region id="highAltitude">
        <LatLonAltBox>
          <north>40</north>
          <south>37</south>
          <east>-74</east>
          <west>-79</west>
          <minAltitude>50000</minAltitude>
          <maxAltitude>500000</maxAltitude>
        </LatLonAltBox>
        <LabelStyle id="styleNameHere">
          <scale>0</scale>
        </LabelStyle>
      </Region>
    <Snippet></Snippet>
                ...
    <placemark> ... </placemark>
    <placemark> ... </placemark>
    <placemark> ... </placemark>
                ...
  </Folder>
</Document>

The point of all this code is to suppress labels at altitudes above 50,000 feet, but it does nothing of the sort. Toward the end of the code, after the </Folder> tag but before the </Document> tag, there is some code, generated when the file was exported, that specifies label styles. But whether or not I delete the <scale> part of it, it seems to have no effect. That code is as follows:

<Style id="Stylename">
  <IconStyle>
    ...
  </IconStyle>
  <LabelStyle>
    <color> ... </color>
    <scale> ... </scale>
  </LabelStyle>
  <PolyStyle>
     ...
  </PolyStyle>
</Style>

I suspect that I'm doing something wrong here in terms of syntax, but, because I've had no experience with KML at all until a few days ago, I'm not sure what the issue is. I appreciate any ideas as to why this isn't working.

Was it helpful?

Solution

You need to define the Lod (Level of Detail) in the Region otherwise it will always appear.

<Region id="highAltitude">
  <LatLonAltBox>
   ...
  </LatLonAltBox>
  <Lod>
    <minLodPixels>256</minLodPixels>
  </Lod>
<Region>

The minLodPixels defines the size of the region where if it is less than this minimum number of pixels on the screen then the region is not shown.

https://developers.google.com/kml/documentation/kmlreference#lod

Also, the LabelStyle is not valid within the Region. That must appear in a <Style> element. If KML doesn't behave as you'd expect 9 out of 10 times the syntax is wrong -- try to validate it using a KML validator.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top