Changeset 339


Ignore:
Timestamp:
04/03/09 00:29:20 (9 years ago)
Author:
dwins
Message:

Add Measure tool, with some support classes for buttons that wrap OL controls.

Location:
apps/opengeo/geoexplorer/trunk
Files:
3 added
2 edited

Legend:

Unmodified
Added
Removed
  • apps/opengeo/geoexplorer/trunk/debug.html

    r321 r339  
    2323        <script type="text/javascript" src="lib/GeoExplorer.js"></script>
    2424        <script type="text/javascript" src="lib/GeoExplorer/dispatch.js"></script>
     25        <script type="text/javascript" src="lib/MapToolMenu.js"></script>
     26        <script type="text/javascript" src="lib/MapToolToggle.js"></script>
     27        <script type="text/javascript" src="lib/MapToolSplitToggle.js"></script>
    2528
    2629        <script>
  • apps/opengeo/geoexplorer/trunk/lib/GeoExplorer.js

    r325 r339  
    245245            getFeatureInfo: new OpenLayers.Control.WMSGetFeatureInfo(this.initialConfig.ows, {
    246246                queryVisible: true
    247             })
     247            }),
     248            measureLength: this.createMeasureTool(OpenLayers.Handler.Path, 'Length'),
     249            measureArea: this.createMeasureTool(OpenLayers.Handler.Polygon, 'Area')
    248250        };
    249251
     
    255257
    256258        var toolGroup = "toolGroup";
     259
    257260        var toolbarItems = [
    258261            new Ext.Button({
     
    261264                scope: this
    262265            }),
    263             new Ext.Button({
    264                 text: "GetFeatureInfo",
     266            new MapToolToggle({
     267                text: "Get Feature Info",
     268                iconCls: null,
     269                toggleGroup: toolGroup,
     270                tool: mapControls.getFeatureInfo
     271            }),
     272            new MapToolSplitToggle({
     273                text: "Measure",
     274                iconCls: null,
     275                defaultTool: mapControls.measureLength,
     276                tools: [
     277                    {text: 'Length', tool: mapControls.measureLength, iconCls: null},
     278                    {text: 'Area', tool: mapControls.measureArea, iconCls: null}
     279                ],
    265280                enableToggle: true,
    266                 toggleGroup: toolGroup,
    267                 handler: function(toggled, item) {
    268                     if (toggled){
    269                         mapControls.getFeatureInfo.activate();
    270                     } else {
    271                         mapControls.getFeatureInfo.deactivate();
    272                     }
    273                 },
    274                 scope: this
     281                toggleGroup: toolGroup
    275282            })
    276283        ];
    277284
    278285        return toolbarItems;
     286    },
     287
     288    createMeasureTool: function(handlerType, title) {
     289        var measureControl = new OpenLayers.Control.Measure(handlerType, {persist: true});
     290
     291        var measureToolTip;
     292       
     293        var tooltipTitle = title;
     294
     295        var cleanup = OpenLayers.Function.bind(function() {
     296            if (measureToolTip) {
     297                measureToolTip.destroy();
     298            }   
     299        }, this);
     300
     301        var makeString = OpenLayers.Function.bind(function(metricData) {
     302            var metric = metricData.measure;
     303            var metricUnit = metricData.units;
     304           
     305            measureControl.displaySystem = "english";
     306           
     307            var englishData = metricData.geometry.CLASS_NAME.indexOf("LineString") > -1
     308                ? measureControl.getBestLength(metricData.geometry)
     309                : measureControl.getBestArea(metricData.geometry);
     310
     311            var english = englishData[0];
     312            var englishUnit = englishData[1];
     313           
     314            measureControl.displaySystem = "metric";
     315           
     316            return metric.toFixed(2) + " " + metricUnit + "<br>"
     317                + english.toFixed(2) + " " + englishUnit;
     318        }, this);
     319
     320
     321        measureControl.events.register("measurepartial", this, function(data) {
     322            cleanup();
     323           
     324            measureToolTip = new Ext.ToolTip({
     325                target: Ext.getBody(),
     326                html: makeString(data),
     327                title: tooltipTitle,
     328                autoHide: false,
     329                draggable: false,
     330                showDelay: 5
     331            });
     332        });
     333
     334        measureControl.events.register("measure", this, function(data) {
     335            cleanup();
     336           
     337            measureToolTip = new Ext.ToolTip({
     338                target: Ext.getBody(),
     339                html: makeString(data),
     340                title: tooltipTitle,
     341                autoHide: false,
     342                closable: true,
     343                draggable: false,
     344                showDelay: 5
     345            });
     346           
     347            feature = new OpenLayers.Feature.Vector(data.geometry, {}, {});
     348           
     349            measureToolTip.on("hide", function() {
     350                data.clearDisplay();
     351                cleanup();
     352            }, this);
     353        });
     354       
     355        measureControl.events.register("deactivate", this, cleanup);
     356        return measureControl;
    279357    },
    280358
     
    308386     */
    309387    bookmark: function(){
    310 
    311388        var config = this.extractConfiguration();
    312389
     
    333410
    334411        return url;
    335 
    336412    },
    337413   
Note: See TracChangeset for help on using the changeset viewer.