[OpenLayers-Users] Measure Control - get distance on mouse move - part 2

Matt Foster Matthew.Foster at noaa.gov
Thu Apr 23 15:01:55 EDT 2009


I'm a tad confused here.  Is none of this possible in 2.7?

Matt


Josh Rosenthal wrote:
> D'oh!  Yes, that should have been obvious.  Either use whatever is 
> being triggered by the modify callback, or set a custom one if the 
> control isn't already using one.
>
> Much obliged,
>
> Josh
>
>
> On Wed, Apr 22, 2009 at 4:35 PM, Andreas Hocevar <ahocevar at opengeo.org 
> <mailto:ahocevar at opengeo.org>> wrote:
>
>     Josh Rosenthal wrote:
>
>         Thanks a lot for the solution using callbacks.  I was
>         wondering if you could suggest how that might be adapted to
>         give the measurements on a draw feature.  It's much easier
>         than what I was previously doing for measure and drawFeature
>         (passing a customized modifyFeature function in the options,
>         where the new function was the same as the original, but also
>         had the requisite getLength statements - functional, but it
>         seems like this should be far more version dependent than the
>         callback solution).
>
>         When I try to use callbacks-modify on a drawFeature (as
>         below), my modify callback doesn't seem to get used (the
>         console.log(this) never fires).  I assume this is because
>         measureControls didn't already use a modify callback, whereas
>         drawFeature does, and as such drawFeature overrides any modify
>         callback I might try to pass in?  Is there any way to append
>         to the normal modify callback?  Am I missing something obvious?
>
>
>     The best way to achieve this would be to listen for the
>     sketchmodified event of the DrawFeature control. this is what
>     actually gets triggered in the modify callback of the handler that
>     is configured with DrawFeature.
>
>     Regards,
>     Andreas.
>
>
>         Thanks!
>         Josh
>
>         broken: uses callbacks - modify:  selectDrawCircle = new
>         OpenLayers.Control.DrawFeature(selectLayerPoly,
>                                OpenLayers.Handler.RegularPolygon,{
>                                  
>          displayClass:"olControlSelectDrawCircle",
>                                  
>          element:document.getElementById('SelectControl_Distance'),
>                                  
>          unitElement:document.getElementById('SelectControl_mapUnit'),
>                                    callbacks:{
>                                        modify: function (point,feature) {
>                            console.log(this);
>                                        
>          this.element.value=this.radius.toFixed(2);
>                                        
>          this.unitElement.innerHTML=this.map.getUnits();              
>                                                     }
>                                    },
>                                    handlerOptions:{
>                                        sides:40
>                                          }
>                                        });
>                                    functional: uses slightly
>         customized modifyGeometry function passed in as an option
>                         selectDrawCircle = new
>         OpenLayers.Control.DrawFeature(selectLayerPoly,
>                                OpenLayers.Handler.RegularPolygon,{
>                                  
>          displayClass:"olControlSelectDrawCircle",
>                                    handlerOptions:{
>                                        sides:40,
>                                      
>          element:document.getElementById('SelectControl_Distance'),
>                                      
>          unitElement:document.getElementById('SelectControl_mapUnit'),
>                                        modifyGeometry: function() {
>                                            var angle, dx, dy, point;
>                                            var ring =
>         this.feature.geometry.components[0];
>                                            // if the number of sides
>         ever changes, create a new geometry
>                                            if(ring.components.length
>         != (this.sides + 1)) {
>                                                this.createGeometry();
>                                                ring =
>         this.feature.geometry.components[0];
>                                            }
>                                            for(var i=0; i<this.sides;
>         ++i) {
>                                                point = ring.components[i];
>                                                angle = this.angle + (i
>         * 2 * Math.PI / this.sides);
>                                                point.x = this.origin.x
>         + (this.radius * Math.cos(angle));
>                                                point.y = this.origin.y
>         + (this.radius * Math.sin(angle));
>                                                point.clearBounds();
>                                            }
>                                            // note, only val b/c this
>         is an input field.
>                                        
>          this.element.value=this.radius.toFixed(2);
>                                        
>          this.unitElement.innerHTML=this.map.getUnits();
>                                        }
>                                 }});
>
>
>         On Wed, Apr 22, 2009 at 8:22 AM, Andreas Hocevar
>         <ahocevar at opengeo.org <mailto:ahocevar at opengeo.org>
>         <mailto:ahocevar at opengeo.org <mailto:ahocevar at opengeo.org>>>
>         wrote:
>
>            Hi,
>
>            the solution (if you're using trunk or 2.8) is quite
>         simple. The snippet
>            below replaces the definition of measureControls in the
>         measure example
>            (starting around L65)
>
>                       measureControls = {
>                           line: new OpenLayers.Control.Measure(
>                               OpenLayers.Handler.Path, {
>                                   callbacks: {
>                                       modify: function(point, feature) {
>                                            
>         measureControls.line.measurePartial(point,
>                                                   feature.geometry);
>                                       }
>                                   },
>                                   persist: true,
>                                   handlerOptions: {
>                                       layerOptions: {styleMap: styleMap}
>                                   }
>                               }
>                           ),
>                           polygon: new OpenLayers.Control.Measure(
>                               OpenLayers.Handler.Polygon, {
>                                   callbacks: {
>                                       modify: function(point, feature) {
>
>            measureControls.polygon.measurePartial(point,
>                                                   feature.geometry);
>                                       }
>                                   },
>                                   persist: true,
>                                   handlerOptions: {
>                                       layerOptions: {styleMap: styleMap}
>                                   }
>                               }
>                           )
>                       };
>
>            As you can see, the trick is to add a modify callback to
>         the handler,
>            calling the control's measurePartial method.
>
>            Regards,
>            Andreas.
>
>            pribram pribram wrote:
>             > Hi,
>             > Is there anything new about measuring + getting distance on
>            mousemove?
>             >
>          
>          http://n2.nabble.com/Measure-Control---get-distance-on-mouse-move-td2503580.html
>             > If there is a solution, please publish it.
>             >
>             > Thanks,
>             > Pribram
>             > _______________________________________________
>             > Users mailing list
>             > Users at openlayers.org <mailto:Users at openlayers.org>
>         <mailto:Users at openlayers.org <mailto:Users at openlayers.org>>
>
>             > http://openlayers.org/mailman/listinfo/users
>             >
>
>
>            --
>            Andreas Hocevar
>            OpenGeo - http://opengeo.org/
>            Expert service straight from the developers.
>
>            _______________________________________________
>            Users mailing list
>            Users at openlayers.org <mailto:Users at openlayers.org>
>         <mailto:Users at openlayers.org <mailto:Users at openlayers.org>>
>
>            http://openlayers.org/mailman/listinfo/users
>
>
>
>
>     -- 
>     Andreas Hocevar
>     OpenGeo - http://opengeo.org/
>     Expert service straight from the developers.
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>   

-- 
Do not go where the path may lead; go instead where there is no path and leave a trail.
-- Ralph Waldo Emerson

-------------- next part --------------
A non-text attachment was scrubbed...
Name: matthew_foster.vcf
Type: text/x-vcard
Size: 229 bytes
Desc: not available
Url : http://lists.osgeo.org/pipermail/openlayers-users/attachments/20090423/51c274c8/matthew_foster.vcf


More information about the Users mailing list