Search code examples
openlayers

OpenLayers - Trying to load layers using a JSON file


I will have a bunch of layers I need to load into my map, so instead of loading each one individually I was trying to load using a json file and Openlayers.Request.GET but do not know how to complete to code.

json file:

{
"layers": [
{ "title":"Client Manholes" , "url":"./mh_file.geojson" , "style":"mh_style"}, 
{ "title":"Client Pipe" , "url":"./pipe_file.geojson" , "style":"pipe_style"}, 
{ "title":"Client Parcels" , "url":"./parcel_file.geojson" , "style":"parcel_style"}
]
}

javascript:

var request = OpenLayers.Request.GET({
    url: "http://domain.com/layers.json",
    callback: handler
});

function handler(request) {
    //alert (request);
    var  response = json.read (request.responseText);
    //loop thru each layer
    for each (var layer in request) {
                //load layer
                layer = new OpenLayers.Layer.Vector(layer_title, {
                    strategies: [new OpenLayers.Strategy.Fixed()],
                    protocol: new OpenLayers.Protocol.HTTP({
                        url: layer_url,
                        format: new OpenLayers.Format.GeoJSON({
                        })
                    }),
                    //...load stylemap
                });
                //turn layer off
                layer.setVisibility(false);
            }

        };

Solution

  • Fixed it!

    function handler (request) {
                var  json = new  OpenLayers.Format.JSON ();
                var  response = json.read (request.responseText);
                //console.log(response); 
                var layer_data = response.layers
                for (var i in layer_data) {
                    var layer_name = layer_data[i].title;
                    //alert(layer_name);
                    var layer_url = layer_data[i].url;
                    //alert(layer_url);
                    var layer_style = layer_data[i].style;
                    //alert (layer_style);
                    layer = new OpenLayers.Layer.Vector(layer_name, {
                        strategies: [new OpenLayers.Strategy.Fixed()],
                        protocol: new OpenLayers.Protocol.HTTP({
                            url: layer_url,
                            format: new OpenLayers.Format.GeoJSON({
                            })
                        }),
                        //...load stylemap
                    });
                    //turn layer off
                    layer.styleMap = mh_style_map;
                    layer.setVisibility(false);
                    map.addLayer(layer);
                }
                //alert (response);
            };