Processing math: 25%

5 votos

OpenLayers eliminar polígono dibujado previamente sobre cómo comenzar a dibujar otro

Objetivo:

En cualquier punto del tiempo, no sólo DEBE ser cero/uno de polígono(s) en una capa vectorial con un polígono de control. Necesito el anterior polígono para ser removido tan pronto como el usuario comienza a dibujar el primer vértice de la siguiente polígono.

Código:

var map = new OpenLayers.Map(mapDiv, options);
var tempLayer = new OpenLayers.Layer.Vector("Temp Layer");
map.addLayer(tempLayer);

var polyControl = new OpenLayers.Control.DrawFeature(tempLayer,OpenLayers.Handler.Polygon);

polyControl.events.register('featureadded', ' ', removeExistingPolygon);

function removeExistingPolygon(feature) //Assuming event listener gets a feature object
//Written mainly with featureadded in mind
{
  if(feature.layer.features.length > 1){
    feature.layer.removeFeatures(feature.layer.features[0]);
  }
}

tempLayer.events.register(<event_name>, ' ', <prev_polygon_removal_function>);

Pregunta:

Lo event_name y la función se debe usar para alcanzar el objetivo? He intentado 'sketchstarted' en tempLayer pero se activa incluso antes de que el usuario comienza a dibujar un polígono. 'vertexmodified' no parece funcionar del todo.

El objetivo es parcialmente satisfecho cuando se utiliza featureadded con polyControl pero en ese caso, el primer polígono permanece visible hasta que el segundo se ha completado.

Alguna sugerencia sobre cómo proceder son más apreciados. Gracias.

5voto

Yaakov Ellis Puntos 15470

Tienes catch-22 o al menos no lo suficientemente detallada de los requisitos. Específicamente - ¿desea quitar la 1ª característica tan PRONTO como el usuario comienza a dibujar una nueva característica? O cuando se hayan terminado? Porque usted podría terminar soplando su 1ª función y el usuario cancela fuera de dibujo 2ª función y, a continuación, usted no tiene nada.

Tiene 2 cosas adicionales que usted puede registrar:

1) Registrarse para escuchar la Control's activate evento. Cuando la herramienta de dibujo está activado, sólo soplar a cabo cualquiera de las funciones de la capa.
1a) Y, por cierto, es mejor decir layer.removeAllFeatures() en lugar de la manera que usted tiene.

2) Registrarse para escuchar la Layer's beforefeatureadded evento y el trabajo de su lógica de allí. http://dev.openlayers.org/docs/files/OpenLayers/Layer/Vector-js.html#OpenLayers.Layer.Vector.events

2voto

Soubra Puntos 11

Esta respuesta está construida con la ayuda excelente de @Vadim. Lea su respuesta y los comentarios posteriores para una explicación detallada

Otro enlace útil sobre devoluciones de llamada del controlador: http://gis.stackexchange.com/a/37741/10620

Solución:

2voto

coder Puntos 1250

"polyControl.handler.callbacks.point = function(data) {if(tempLayer.features.length > 0) {tempLayer.removeAllFeatures(); }} "No hay propiedades 'callbacks'

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