1 votos

OpenLayers: dibujar una trayectoria con sólo dos puntos

Quiero dibujar un camino con no más de 2 puntos. En el segundo punto quiero que el camino esté terminado.

Estoy usando el OpenLayers DrawFeature, pongo un callbacks para "punto" donde cuento los puntos creados y si los puntos son dos termino el boceto con finishSketch() método. El problema es que cuando el método finishSketch() llama al método finishGeometry() que elimina el último punto añadido de la ruta, lo que provoca el siguiente error

"Uncaught TypeError: Cannot read property 'geometry' of null "

Mi pregunta es si hay alguna forma legítima de terminar una ruta programáticamente o si se trata de un error en el control DrawFeature.

2voto

Kornelije Petak Puntos 475

No es un error de Draw Feature, simplemente es así como funciona 'sketch'. Como habrás notado, cuando dibujas una línea usando el control DrawFeature, el último punto irá donde muevas el ratón, y cuando termines de dibujar, será eliminado y el resto de los puntos formarán la línea resultante. Esto significa que debes tener al menos 3 puntos para terminar una línea (incluyendo el que mueves con el ratón).

Creo que quieres una herramienta que termine la línea al colocar el segundo punto y que no se muestre más boceto. En ese caso, no llames a finishSketch() en el callback de 'punto', llama a drawFeature en su lugar. Me imagino que la función de callback se vería así:

/**
 * pointGeometry: the point you just added
 * lineGeometry: the current line sketch
 */
point: function(pointGeometry, lineGeometry) {
    var numPoints = lineGeometry.getVertices().length;
    if (numPoints == 2) {
        this.drawFeature(lineGeometry);
    }
}

1voto

IWantMyCar Puntos 61

Simplemente utilice la propiedad maxVertices

    // single line drawing control
    _singleLineControl = new OpenLayers.Control.DrawFeature(
        _singleLineLayer,
        OpenLayers.Handler.Path,
        {
            eventListeners: { "featureadded": drawingFinished },
            handlerOptions: {
                maxVertices: 2,
                single: true,
                freehand: false,
            }
        });
    viewer.addControl(_singleLineControl); 
    _singleLineControl.deactivate();

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X