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 <[email protected] <mailto:[email protected]>> 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
        <[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>>
        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
            > [email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>

            > http://openlayers.org/mailman/listinfo/users
            >


           --
           Andreas Hocevar
           OpenGeo - http://opengeo.org/
           Expert service straight from the developers.

           _______________________________________________
           Users mailing list
           [email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>

           http://openlayers.org/mailman/listinfo/users




-- Andreas Hocevar
    OpenGeo - http://opengeo.org/
    Expert service straight from the developers.


------------------------------------------------------------------------

_______________________________________________
Users mailing list
[email protected]
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

begin:vcard
fn:Matt Foster - N0EYE
n:Foster;Matt
org:;NWS Forecast Office - Norman OK
email;internet:[email protected]
title:Information Technology Officer
tel;work:(405) 325-3406
x-mozilla-html:TRUE
version:2.1
end:vcard

_______________________________________________
Users mailing list
[email protected]
http://openlayers.org/mailman/listinfo/users

Reply via email to