diff gis_gui/blocks/layer.js @ 63:7f008e782563

add gui files to product via FileSystemSite
author casties
date Fri, 05 Nov 2010 18:52:55 +0100
parents
children 49fb47bbe2e6
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gis_gui/blocks/layer.js	Fri Nov 05 18:52:55 2010 +0100
@@ -0,0 +1,147 @@
+
+guiBlocks.prototype.addLayerBlock = function(url, baseId, params) {
+    if (typeof(params) == "string") {
+        // then its table name
+        params = {"type": "layer", "table": params};
+    }
+    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_color_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.color_field) {
+                        params.color_field = "Default";
+                    } 
+                    $(this).find("option").filter(function(){return $(this).text() == params.color_field;}).attr("selected","true");
+                });
+        $(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
+        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",params);
+        });
+        
+    });
+};
+
+guiBlocks.Block.prototype.readLayerParams = 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(".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.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.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 {
+            // what to do?
+            return;
+        }
+        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);
+
+            //geocoder = new google.maps.Geocoder();
+            var newMarker=new google.maps.KmlLayer(kmlURL);
+            console.debug("new marker layer=",newMarker);
+            newMarker.setMap(map);
+        }
+    });
+
+};
+