Suite

OpenLayers : tracer un chemin avec seulement deux points


Je veux dessiner un chemin avec pas plus de 2 points. Sur le deuxième point je veux que le chemin soit terminé.

J'utilise OpenLayers DrawFeature, je définis un rappel pour "point" où je compte les points créés et si les points sont deux, je termine l'esquisse avecfinirEsquisse()méthode. Le problème est que lorsque la méthode finishSketch() appelle lefinitionGéométrie()méthode qui supprime le dernier point ajouté du chemin qui provoque l'affichage de l'erreur suivante

"Uncaught TypeError : Impossible de lire la propriété 'géométrie' de null "

Ma question est le moyen légitime de terminer un chemin par programme ou il s'agit d'un bogue dans le contrôle DrawFeature.


Ce n'est pas un bogue dans la fonction Draw, c'est juste comme ça que fonctionne le « sketch ». Comme vous avez dû le remarquer, lorsque vous dessinez une ligne à l'aide du contrôle DrawFeature, le dernier point ira là où vous déplacez la souris, et lorsque vous aurez fini de dessiner, il sera supprimé et le reste des points forme la ligne de résultat. Cela signifie que vous devez avoir au moins 3 points pour terminer une ligne (y compris le mouvement avec votre souris).

Je pense que vous voulez un outil qui termine la ligne lors du placement du deuxième point et qu'aucun croquis ne soit plus affiché. Dans ce cas, n'appelez pas finishSketch() dans le rappel 'point', appelez plutôt drawFeature. J'imagine que la fonction de rappel ressemblerait à ceci:

/** * pointGeometry : le point que vous venez d'ajouter * lineGeometry : l'esquisse de la ligne actuelle */ point : function(pointGeometry, lineGeometry) { var numPoints = lineGeometry.getVertices().length; if (numPoints == 2) { this.drawFeature(lineGeometry); } }

Utiliser simplement la propriétémaxSommets

// contrôle de dessin d'une seule ligne _singleLineControl = new OpenLayers.Control.DrawFeature( _singleLineLayer, OpenLayers.Handler.Path, { eventListeners : { "featureadded": drawingFinished }, handlerOptions : { maxVertices : 2, single : true, freehand : false, } }); viewer.addControl(_singleLineControl); _singleLineControl.deactivate();


Voir la vidéo: Openlayers 6 Tutorial #9 - Interaction With Vector Features (Octobre 2021).