Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I have previously asked this question to no avail so I thought putting this up here would be a good idea.

Here is an example on:

How to Refresh / Reload a KML layer in OpenLayers. Dynamic KML Layer. See my answer below.


TLDR: See my answer below.

share|improve this question
add comment

4 Answers

Figured seen as it was hard enough for me to find information on this I would add this:


1)

Create the KML Layer:

            //Define your KML layer
            var MyKmlLayer= new OpenLayers.Layer.Vector("This Is My KML Layer", {
                //Set your projection and strategies//
                projection: new OpenLayers.Projection("EPSG:4326"),
                strategies: [new OpenLayers.Strategy.Fixed()],
                //set the protocol with a url//
                protocol: new OpenLayers.Protocol.HTTP({
                    //set the url to your variable//
                    url: mykmlurl,
                    //format this layer as KML//
                    format: new OpenLayers.Format.KML({
                        //maxDepth is how deep it will follow network links//
                        maxDepth: 1,
                        //extract styles from the KML Layer//
                        extractStyles: true,
                        //extract attributes from the KML Layer//
                        extractAttributes: true
                    })
                })
            });

2)

Set the URL for the KML Layer:

//note that I have host equal to location//   //Math.Random will stop caching//
var mykmlurl= 'http://' + host + '/KML?key=' + Math.random();

3)

Set the interval in which to refresh your layer:

           //function called// //timer// //layer to refresh//
window.setInterval(UpdateKmlLayer, 5000, MyKmlLayer);

4)

The function to update the layer:

            function UpdateKmlLayer(layer) {
                //setting loaded to false unloads the layer//
                layer.loaded = false;
                //setting visibility to true forces a reload of the layer//
                layer.setVisibility(true);
                //the refresh will force it to get the new KML data//
                layer.refresh({ force: true, params: { 'key': Math.random()} });
                //- <3 from Thqr -//
            }

Hopes this makes it easier for some others out there. Good luck.

share|improve this answer
    
What if your KML is local or on a networked drive? –  Furlong Nov 8 '10 at 21:15
add comment

I have been putzing around with this to no avail. Would someone mind taking a look at my code and telling me what I am doing wrong? Thank you!

<html>
<head>
<title>Test</title>
<link rel="stylesheet" href="http://openlayers.org/api/theme/default/style.css" type="text/css" />
<link rel="stylesheet" href="http://openlayers.org/dev/examples/style.css" type="text/css" />
<script src='http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAl9RMqSzhPUXAfeBCXOussRTQDbvAygy0cfGJr8dEMAYKf3RWNBQqP9mjKIsqTfmAlz5LOJ3Xpy5s4w'></script>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">

  var map;

  function init() {
    // Create the map object
    map = new OpenLayers.Map('map');
    // Create a Google layer
    var gmap = new OpenLayers.Layer.Google(
        "Google Streets", // the default
        {numZoomLevels: 20}
    );
    // Add layer to map
    map.addLayer(gmap);

    map.setCenter(new OpenLayers.LonLat(-112.1161, 33.6636), 13);         
  }

  var MyKmlLayer= new OpenLayers.Layer.Vector("This Is My KML Layer", {
            //Set your projection and strategies//
            projection: new OpenLayers.Projection("EPSG:4326"),
            strategies: [new OpenLayers.Strategy.Fixed()],
            //set the protocol with a url//
            protocol: new OpenLayers.Protocol.HTTP({
                //set the url to your variable//
                url: C:/Users/person/desktop/test.kml,
                //format this layer as KML//
                format: new OpenLayers.Format.KML({
                    //maxDepth is how deep it will follow network links//
                    maxDepth: 1,
                    //extract styles from the KML Layer//
                    extractStyles: true,
                    //extract attributes from the KML Layer//
                    extractAttributes: true
                })
            })
        });

    var proposedanchorpositionurl = 'http://' + host + '/KML?key=' + Math.random();

    window.setInterval(UpdateKmlLayer, 5000, MyKmlLayer);

    function UpdateKmlLayer(layer) {
            //setting loaded to false unloads the layer//
            layer.loaded = false;
            //setting visibility to true forces a reload of the layer//
            layer.setVisibility(true);
            //the refresh will force it to get the new KML data//
            layer.refresh({ force: true, params: { 'key': Math.random()} });
            //- <3 from Thqr -//
        }
</script>
</head>
<body onload="init()">
<h1 id="title">test</h1>
<div id="map" class=""></div>
</body>
</html>

So sorry, I had to correct your imperfect codes. Should run this time.

share|improve this answer
add comment

untested but something like this?

<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">

  var map;

  function init() {
    // Create the map object
    map = new OpenLayers.Map('map');
    // Create a Google layer
    var gmap = new OpenLayers.Layer.Google(
        "Google Streets", // the default
        {numZoomLevels: 20}
    );
    // Add layer to map
    map.addLayer(gmap);

    map.setCenter(new OpenLayers.LonLat(-112.1161, 33.6636), 13);         


  var KMLURL = 'C:/Users/person/desktop/test.kml?' + Math.random();

  var MyKmlLayer= new OpenLayers.Layer.Vector("This Is My KML Layer", {
            //Set your projection and strategies//
            projection: new OpenLayers.Projection("EPSG:4326"),
            strategies: [new OpenLayers.Strategy.Fixed()],
            //set the protocol with a url//
            protocol: new OpenLayers.Protocol.HTTP({
                //set the url to your variable//
                url: KMLURL,
                //format this layer as KML//
                format: new OpenLayers.Format.KML({
                    //maxDepth is how deep it will follow network links//
                    maxDepth: 1,
                    //extract styles from the KML Layer//
                    extractStyles: true,
                    //extract attributes from the KML Layer//
                    extractAttributes: true
                })
            })
        });

    window.setInterval(UpdateKmlLayer, 5000, MyKmlLayer);

    function UpdateKmlLayer(layer) {
            //setting loaded to false unloads the layer//
            layer.loaded = false;
            //setting visibility to true forces a reload of the layer//
            layer.setVisibility(true);
            //the refresh will force it to get the new KML data//
            layer.refresh({ force: true, params: { 'key': Math.random()} });
            //- <3 from Thqr -//
        }
 }
</script>
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.