view gis_gui/blocks/layer.js @ 245:7c5d825a0083

show line and polygon-layer
author fknauft
date Thu, 08 Sep 2011 13:04:48 +0200
parents 0a3303682712
children bba7dd7b6b4c
line wrap: on
line source


guiBlocks.prototype.addLayerBlock = function(url, baseId, params) {
    if (typeof(params) == "string") {
        // then its the table name
        params = {"type": "layer", "table": params, "color_field":"red","geometry_field":"point"};
    }
    var block = this.addBlock(url, baseId, params, function() {
        // function after add block finished
        var id = block.id;
        var be = block.element;
        block.type = "layer";
        var tablename = params.table;
        console.debug("in layerblock after block load!");
        $(be).find(".layer_name").val(block.params.name);
        $(be).find(".layer_position_select").load("../db/RESTdb/db/public/"+tablename+"?format=HTML&type=schema_table_rows&layout=select&element_id=rows #rows *",
                function() {
                    $(this).find("option:first").before('<option>Default</option>');
                    if (!params.position_field) {
                        params.position_field = "Default";
                    } 
                    $(this).find("option").filter(function(){return $(this).text() == params.position_field;}).attr("selected","true");
                });
        $(be).find(".layer_label_select").load("../db/RESTdb/db/public/"+tablename+"?format=HTML&type=schema_table_rows&layout=select&element_id=rows #rows *",
                function() {
                    $(this).find("option:first").before('<option>Default</option>');
                    if (!params.label_field) {
                        params.label_field = "Default";
                    } 
                    $(this).find("option").filter(function(){return $(this).text() == params.label_field;}).attr("selected","true");
                });
        $(be).find(".layer_size_select").load("../db/RESTdb/db/public/"+tablename+"?format=HTML&type=schema_table_rows&layout=select&element_id=rows #rows *",
                function() {
                    $(this).find("option:first").before('<option>Default</option>');
                    if (!params.size_field) {
                        params.size_field = "Default";
                    } 
                    $(this).find("option").filter(function(){return $(this).text() == params.size_field;}).attr("selected","true");
                });
                
        $(be).find(".layer_geom_select").attr("element","<select id='geom'><option selected>point</option><option>poly</option><option>line</option></select>");
        params.geometry_field = "point";
        
        $(be).find(".layer_color_select").attr("element","<select id='color'><option selected>red</option><option>blue</option><option>black</option><option>green</option><option>violett</option></select>");
        params.color_field = "red";
        
        $(be).find(".layer_shape_select").load("../db/RESTdb/db/public/"+tablename+"?format=HTML&type=schema_table_rows&layout=select&element_id=rows #rows *",
                function() {
                    $(this).find("option:first").before('<option>Default</option>');
                    if (!params.shape_field) {
                        params.shape_field = "Default";
                    }
                    $(this).find("option").filter(function(){return $(this).text() == params.shape_field;}).attr("selected","true");
                });
        $(be).find(".layer_line_checkbox").attr("checked", params.connect_line);
        // show block
        $(be).fadeIn();

        // save map params in block.param -- too early
        //params = block.readLayerParams();
        
        // load map
        console.debug("params:", params);
        block.updateLayer(be,params);
        
        // update button
        $(be).find(".layer_update_button").click(function() {
            console.debug("layer update");
            params = block.readLayerParams();
            block.updateLayer(be,params);
        });
        // save button
        $(be).find(".layer_save_button").click(function() {
            console.debug("layer save. this=",this," block=",block);
            params = block.readLayerParams(be,params);
            block.storeBlock("test1");
        });
        // open table button
        $(be).find(".layer_open_table_button").click(function() {
            console.debug("layer open table. this=",this," block=",block);
            var tblblock = blocks.addTableBlock("blocks/table.html?table="+escape(params.table),"table", params.table);
        });
        // create map button
        $(be).find(".map_create_button").click(function() {
            console.debug("layer create map. this=",this," block=",block);
            var mapblock = blocks.addMapBlock("blocks/map.html?layer="+escape(params.name),"map",null,params);
        });
        
    });
};

guiBlocks.Block.prototype.readLayerParams = function(elem,params) {
    // read layer parameters from html element and store in param
    if (elem == null) {
        elem = this.element;
    }
    if (params == null) {
        params = this.params;
    }
    params.name = $(elem).find(".layer_name").val();
    params.position_field = $(elem).find(".layer_position_select").val();
    params.label_field = $(elem).find(".layer_label_select").val();
    params.size_field = $(elem).find(".layer_size_select").val();
    params.color_field = $(elem).find(".layer_color_select").val();
    params.geometry_field = $(elem).find(".layer_geom_select").val();
    params.shape_field = $(elem).find(".layer_shape_select").val();
    params.connect_line = $(elem).find(".layer_line_checkbox").attr("checked");
    return params;
};

guiBlocks.Block.prototype.updateLayer = function(elem,params) {
    // update and draw the google map
    var le = $(elem).find(".map_box").get(0);
    var paramstr = "format=KML_URL";
    if (params.position_field && params.position_field != "Default") {
        paramstr += "&gis_id_field="+params.position_field;
    }
    if (params.color_field!="None"){
    	paramstr += "&color_field="+params.color_field;
    }
    if (params.geometry_field!="None"){
    	paramstr += "&geometry_field="+params.geometry_field;
    }
    if (params.connect_line) {
        paramstr += "&connect_line="+params.connect_line;
    }
    var layerurl = "../db/RESTdb/db/public/" + escape(params.table) + "?" + paramstr;
    console.debug("layerurl: ",layerurl);
    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 {
            // what to do?
            return;
        }
        if (google != null) {
            var latlng = new google.maps.LatLng(29, 116);
            var mapOpts = {
                    zoom: 2,
                    center: latlng,
                    mapTypeId: google.maps.MapTypeId.TERRAIN
            };
            var map = new google.maps.Map(le, mapOpts);
            console.debug("new google map=",map," on el=",le);

            //geocoder = new google.maps.Geocoder();
            var newMarker=new google.maps.KmlLayer(kmlURL,{ suppressInfoWindows: true, map: map});
            
            google.maps.event.addListener(newMarker, 'click', function(kmlEvent) {
            	var text = kmlEvent.featureData.description;
                showInContentWindow(text);
              });

            function showInContentWindow(text) {
            	var orig_obj=$(elem).find(".mapping_info").html();
            	$(elem).find(".mapping_info").html(text);
            	$(elem).find(".mapping_info").one("click",function(){$(elem).find(".mapping_info").html(orig_obj);});
              }

            console.debug("new marker layer=",newMarker);
            //newMarker.setMap(map);
        }
    });

};