view gis_gui/blocks/map.js @ 63:7f008e782563

add gui files to product via FileSystemSite
author casties
date Fri, 05 Nov 2010 18:52:55 +0100
parents
children 2f477270cc0c
line wrap: on
line source


guiBlocks.prototype.addMapBlock = function(url, baseId, firstLayer) {
    var block = this.addBlock(url, baseId, function() {
        // function after add block finished
        var be = block.element;
        console.debug("in mapblock after block load!");
        block.params.map_layers = [];
        if (typeof(firstLayer) != "undefined") {
            block.appendMapLayer(firstLayer);
        }
        
        block.showMapParams();
        // show block
        $(be).fadeIn();

        // save map params in block.param -- too early
        //params = block.readLayerParams();
        
        // load map
        block.updateMap(be,block.params);
        
        // update button
        $(be).find(".map_update_button").click(function() {
            console.debug("map update");
            params = block.readMapParams();
            block.updateMap(be,params);
        });
    });
};

guiBlocks.Block.prototype.appendMapLayer = function(layerparams) {
    // add layer to this map
    var layerinfo = {display: true, layer:layerparams};
    var layers = this.params.map_layers;
    layers.push(layerinfo);
    // update indexes
    for (var i = 0; i < layers.length; i++) {
        layers[i].idx = i;
    }
};

guiBlocks.Block.prototype.showMapParams = function(elem,params) {
    // create html with layer parameters from params
    if (typeof(elem) == 'undefined') {
        elem = this.element;
    }
    if (typeof(param) == 'undefined') {
        params = this.params;
    }
    var layers = params.map_layers;
    // remove old info
    $(elem).remove(".layer_info");
    // write new info
    if (layers.length > 0) {
        var tmpl = $(elem).find(".layer_info_tmpl").tmpl(layers);
        $(elem).find(".map_layer_header").after(tmpl);
    }
};

guiBlocks.Block.prototype.readMapParams = function(elem,params) {
    // read layer parameters from html element and store in param
    if (typeof(elem) == 'undefined') {
        elem = this.element;
    }
    if (typeof(param) == 'undefined') {
        params = this.params;
    }
    params.name = $(elem).find(".map_name").val();
    var layers = params.map_layers;
    for (var i = 0; i < layers.length; i++) {
        layers[i].display = $(elem).find(".layer_display_"+i).attr("checked");
    }
    //params.position_field = $(elem).find(".map_position_select").val();
    //params.connect_line = $(elem).find(".layer_line_checkbox").attr("checked");
    return params;
};

guiBlocks.Block.prototype.updateMap = function(elem,map_params) {
    // update and draw the google map
    var le = $(elem).find(".map_box").get(0);
    // create empty map
    if (typeof(google) != "undefined") {
        var latlng = new google.maps.LatLng(29, 116);
        var mapOpts = {
                zoom: 5,
                center: latlng,
                mapTypeId: google.maps.MapTypeId.TERRAIN
        };
        var map = new google.maps.Map(le, mapOpts);
        console.debug("new google map=",map," on el=",le);
    }
    // add the layers
    var layerList = map_params.map_layers;
    for (var i = 0; i < layerList.length; i++) {
        if (!layerList[i].display) {
            continue;
        }
        var params = layerList[i].layer;
        var paramstr = "format=KML_URL";
        if (params.position_field && params.position_field != "Default") {
            paramstr += "&gis_id_field="+params.position_field;
        }
        if (params.connect_line) {
            paramstr += "&connect_line="+params.connect_line;
        }
        var layerurl = "../db/RESTdb/db/public/" + escape(params.table) + "?" + paramstr;
        jQuery.get(layerurl, function(data, textStatus, XMLHttpRequest) {
            // function after load kml url finished
            console.debug("kml url loaded! this=", this, " data=", data, " ("+typeof(data)+")");
            if (typeof(data) == "string") {
                var kmlURL = data;
            } else {
                // broken, what now?
                return;
            }
            // render layer
            if (typeof(google) != "undefined") {
                var newMarker=new google.maps.KmlLayer(kmlURL);
                console.debug("new marker layer=",newMarker," map=",map);
                newMarker.setMap(map);
            }
        });
    }
};