← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 3667: (GIS) Distance measuring implemented.

 

Merge authors:
  Jan Henrik Øverland (janhenrik-overland)
------------------------------------------------------------
revno: 3667 [merge]
committer: Jan Henrik Overland <janhenrik.overland@xxxxxxxxx>
branch nick: dhis2
timestamp: Thu 2011-05-19 15:33:40 +0200
message:
  (GIS) Distance measuring implemented.
added:
  dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/images/measure.png
modified:
  dhis-2/dhis-web/dhis-web-mapping/src/main/resources/org/hisp/dhis/mapping/i18n_module.properties
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/i18n.vm
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/css/style.css
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/global.js
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/index.js


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== added file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/images/measure.png'
Binary files dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/images/measure.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/images/measure.png	2011-05-19 12:31:31 +0000 differ
=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/resources/org/hisp/dhis/mapping/i18n_module.properties'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/resources/org/hisp/dhis/mapping/i18n_module.properties	2011-04-28 15:43:17 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/resources/org/hisp/dhis/mapping/i18n_module.properties	2011-05-19 12:57:09 +0000
@@ -246,4 +246,5 @@
 characters							= characters
 geojson_file						= GeoJSON file
 history								= History
-api_key								= API key
\ No newline at end of file
+api_key								= API key
+measure_distance					= Measure distance
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/i18n.vm'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/i18n.vm	2011-04-28 15:43:17 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/i18n.vm	2011-05-19 12:57:09 +0000
@@ -248,5 +248,6 @@
     characters: '$encoder.jsEscape($i18n.getString( 'characters' ) , "'")',
     geojson_file: '$encoder.jsEscape($i18n.getString( 'geojson_file' ) , "'")',
     history: '$encoder.jsEscape($i18n.getString( 'history' ) , "'")',
-    api_key: '$encoder.jsEscape($i18n.getString( 'api_key' ) , "'")'
+    api_key: '$encoder.jsEscape($i18n.getString( 'api_key' ) , "'")',
+    measure_distance: '$encoder.jsEscape($i18n.getString( 'measure_distance' ) , "'")'
 };
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/css/style.css'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/css/style.css	2011-05-16 15:25:26 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/css/style.css	2011-05-19 12:31:31 +0000
@@ -68,6 +68,9 @@
 .x-date-inner .x-date-today a {
     border-color:#999999;
 }
+.x-border-layout-ct {
+    background-color: #fcfcfc;
+}
 
 /* OpenLayers (include in lib) */
 /*
@@ -235,6 +238,9 @@
 .x-btn .icon-labels {
 	background-image:url('../../../images/labels.png');
 }
+.x-btn .icon-measure {
+	background-image:url('../../../images/measure.png');
+}
 .x-btn-noicon .x-btn-small .x-btn-text {
     height:16px;
     padding:0 5px;
@@ -328,6 +334,12 @@
 	font:bold 11px arial;
 	color:#111;
 }
+#window-measure-title {
+	padding:0 0 3px 21px;
+	background:url('../../../images/measure.png') no-repeat 0 0 transparent;
+	font:bold 11px arial;
+	color:#111;
+}
 
 /* Ext Panel */
 .panel-title {
@@ -436,3 +448,7 @@
     -moz-border-radius-topright: 2px;
     -webkit-border-top-right-radius: 2px;
 }
+#measureDistanceDiv {
+    padding:0 0 0 5px;
+    color:#222222;
+}

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/global.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/global.js	2011-04-12 17:22:06 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/global.js	2011-05-19 13:25:14 +0000
@@ -85,7 +85,34 @@
     
     defaultLayerOpacity: 0.8,
     
-    defaultLayerZIndex: 10000
+    defaultLayerZIndex: 10000,
+    
+//  Measure
+
+    sketchSymbolizers: {
+        "Point": {
+            pointRadius: 4,
+            graphicName: "square",
+            fillColor: "white",
+            fillOpacity: 1,
+            strokeWidth: 1,
+            strokeOpacity: 1,
+            strokeColor: "#333333"
+        },
+        "Line": {
+            strokeWidth: 2,
+            strokeOpacity: 1,
+            strokeColor: "#444444",
+            strokeDashstyle: "dash"
+        },
+        "Polygon": {
+            strokeWidth: 2,
+            strokeOpacity: 1,
+            strokeColor: "#666666",
+            fillColor: "white",
+            fillOpacity: 0.3
+        }
+    }
 };
 
 G.util = {
@@ -161,7 +188,7 @@
         return tmp.indexOf(dec_sep) > -1 ? tmp.length-tmp.indexOf(dec_sep) - 1 : 0;
     },
 
-    labels: {    
+    labels: {
         getActivatedOpenLayersStyleMap: function(fsize, fweight, fstyle, fcolor) {
             return new OpenLayers.StyleMap({
                 'default' : new OpenLayers.Style(
@@ -222,6 +249,20 @@
             widget.applyValues();
         }
     },
+    
+    measureDistance: {
+        getMeasureStyleMap: function() {
+            var style = new OpenLayers.Style();    
+            style.addRules([new OpenLayers.Rule({symbolizer: G.conf.sketchSymbolizers})]);    
+            return new OpenLayers.StyleMap({"default": style});
+        },
+            
+        handleMeasurements: function(e) {
+            if (e.measure) {
+                document.getElementById('measureDistanceDiv').innerHTML = e.measure.toFixed(2) + ' ' + e.units;
+            }
+        }
+    },            
 
     sortByValue: function(a,b) {
         return b.value-a.value;

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/index.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/index.js	2011-05-19 08:48:09 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/index.js	2011-05-19 13:25:14 +0000
@@ -2496,7 +2496,7 @@
 		iconCls: 'icon-zoomout',
 		tooltip: G.i18n.zoom_out,
         style: 'margin-top:1px',
-		handler:function() {
+		handler: function() {
 			G.vars.map.zoomOut();
 		}
 	});
@@ -2517,7 +2517,7 @@
                 }
             }
         }
-	});
+	});         
     
     var viewHistoryButton = new Ext.Button({
         id: 'viewhistory_b',
@@ -2614,6 +2614,27 @@
 		}
 	});
 	
+	var predefinedMapLegendSetButton = new Ext.Button({
+		iconCls: 'icon-predefinedlegendset',
+		tooltip: G.i18n.predefined_legend_sets,
+		disabled: !G.user.isAdmin,
+        style: 'margin-top:1px',
+		handler: function() {		
+			if (!predefinedMapLegendSetWindow.hidden) {
+				predefinedMapLegendSetWindow.hide();
+			}
+			else {
+                var x = Ext.getCmp('center').x + G.conf.window_position_x;
+                var y = Ext.getCmp('center').y + G.conf.window_position_y;
+                predefinedMapLegendSetWindow.setPosition(x,y);
+				predefinedMapLegendSetWindow.show();
+                if (!G.stores.predefinedMapLegend.isLoaded) {
+                    G.stores.predefinedMapLegend.load();
+                }
+			}
+		}
+	});
+	
 	var exportImageButton = new Ext.Button({
 		iconCls: 'icon-image',
 		tooltip: G.i18n.export_map_as_image,
@@ -2635,34 +2656,62 @@
 			}
 		}
 	});
-	
-	var predefinedMapLegendSetButton = new Ext.Button({
-		iconCls: 'icon-predefinedlegendset',
-		tooltip: G.i18n.predefined_legend_sets,
-		disabled: !G.user.isAdmin,
+    
+    var measureDistanceButton = new Ext.Button({
+        iconCls: 'icon-measure',
+        tooltip: G.i18n.measure_distance,
         style: 'margin-top:1px',
-		handler: function() {		
-			if (!predefinedMapLegendSetWindow.hidden) {
-				predefinedMapLegendSetWindow.hide();
-			}
-			else {
-                var x = Ext.getCmp('center').x + G.conf.window_position_x;
-                var y = Ext.getCmp('center').y + G.conf.window_position_y;
-                predefinedMapLegendSetWindow.setPosition(x,y);
-				predefinedMapLegendSetWindow.show();
-                if (!G.stores.predefinedMapLegend.isLoaded) {
-                    G.stores.predefinedMapLegend.load();
+        handler: function() {
+            var control = G.vars.map.getControl('measuredistance');
+            
+            if (!control.active) {
+                control.activate();
+                
+                if (!control.window) {
+                    control.window = new Ext.Window({
+                        title: '<span id="window-measure-title">' + G.i18n.measure_distance + '</span>',
+                        layout: 'fit',
+                        closeAction: 'hide',
+                        width: 150,
+                        height: 90,
+                        items: [
+                            {
+                                xtype: 'panel',
+                                layout: 'anchor',
+                                bodyStyle: 'padding:8px',
+                                items: [
+                                    {html: '<div class="window-info">Total distance</div>'},
+                                    {html: '<div id="measureDistanceDiv"></div>'}
+                                ]
+                            }
+                        ],
+                        listeners: {
+                            'hide': function() {
+                                G.vars.map.getControl('measuredistance').deactivate();
+                            }
+                        }
+                    });
                 }
-			}
-		}
-	});
+                control.window.setPagePosition(Ext.getCmp('east').x - (control.window.width + 15 + 5), Ext.getCmp('center').y + 41);
+                control.window.show();
+                document.getElementById('measureDistanceDiv').innerHTML = '0 km';                
+                control.setImmediate(true);
+                control.geodesic = true;
+                control.activate();
+            }
+            else {
+                control.deactivate();
+                control.window.hide();
+            }
+        }
+    });           
 	
 	var adminButton = new Ext.Button({
 		iconCls: 'icon-admin',
 		tooltip: 'Administrator settings',
 		disabled: !G.user.isAdmin,
         style: 'margin-top:1px',
-		handler: function() {                        
+		handler: function() {          
             if (!adminWindow.hidden) {
                 adminWindow.hide();
             }
@@ -2716,6 +2765,7 @@
 			favoritesButton,
             predefinedMapLegendSetButton,
 			exportImageButton,
+            measureDistanceButton,
 			'-',
             adminButton,
 			helpButton,
@@ -2873,5 +2923,18 @@
         slideFactor: 100
     }));
     
+    G.vars.map.addControl(new OpenLayers.Control.Measure( OpenLayers.Handler.Path, {
+        id: 'measuredistance',
+        persist: true,
+        handlerOptions: {
+            layerOptions: {styleMap: G.util.measureDistance.getMeasureStyleMap()}
+        }
+    }));
+    
+    G.vars.map.getControl('measuredistance').events.on({
+        "measurepartial": G.util.measureDistance.handleMeasurements,
+        "measure": G.util.measureDistance.handleMeasurements
+    });
+    
 	}});
 });


Follow ups