Suite

Calculer des distances précises dans OpenLayers 3 ?

Calculer des distances précises dans OpenLayers 3 ?


Je calcule la distance dans OpenLayers 3 (3.9.0).

J'ai une fonction incluse dans mon projet pour mesurer les caractéristiques de ligne/surface, essentiellement tirée des exemples OpenLayers. J'utilise haversineDistance pour calculer des longueurs/surfaces précises, mais continue d'obtenir une erreur empêchant les chiffres d'être signalés.

Fondamentalement, lorsque je commence à mesurer dans le navigateur et console.log les mesures afin que je puisse les voir, elles semblent rapporter avec précision ; cependant, une erreur js dans ol.js empêche les mesures d'être renvoyées dans la page Web afin que le spectateur puisse les voir. L'erreur est « Uncaught TypeError : Impossible de lire la propriété « longueur » d'undefined ». Rapports comme se produisant dans ol.js à la ligne 69.

Mon code pour la fonction est :

var formatLengthFt = function(line) { var length_ft = 0; var coords = line.getCoordinates(); for (var i = 0; i < coords.length; i++) { var c1 = ol.proj.transform(coords[i], 'EPSG:3857', 'EPSG:4326'); var c2 = ol.proj.transform(coords[i + 1], 'EPSG:3857', 'EPSG:4326'); longueur_ft += wgs84Sphere.haversineDistance(c1, c2) ; console.log(length_ft); } return length_ft; }

Avant d'utiliser haversineDistance, j'ai simplement utilisé line.getLength(), mais j'ai ensuite réalisé que les distances/surfaces étaient toutes inexactes. Donc, essayé la solution ci-dessous avec succès, je ne peux tout simplement pas signaler les chiffres sur la page Web. J'ai également essayé d'utiliser turf.js, avec un certain succès. En tout cas, j'ai juste besoin d'une méthode pour obtenir des distances/zones précises et je préférerais que le code ci-dessus fonctionne correctement, mais ouvert à d'autres solutions également.


Une réponse (à l'origine modifiée dans leur question) par le demandeur était :

Cela fonctionne avec le code ci-dessous. Fondamentalement le même, juste des changements mineurs que ci-dessus. Je pense que le problème était que j'avais une mauvaise syntaxe quelque part dans mon fichier JS. J'avais commenté beaucoup de code alors que j'essayais différentes méthodes, et j'avais probablement commenté en détail un code qui commençait à interférer. Quoi qu'il en soit, le code ci-dessous fonctionne très bien.

var formatLength = function(line) { var length = 0; var coordonnées = line.getCoordinates(); var sourceProj = map.getView().getProjection(); for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) { var c1 = ol.proj.transform(coordinates[i], sourceProj, 'EPSG:4326'); var c2 = ol.proj.transform(coordinates[i + 1], sourceProj, 'EPSG:4326'); longueur += wgs84Sphere.haversineDistance(c1, c2) ; } var sortie ; sortie = ((Math.round(longueur * 100) / 100)*3.280839).toFixed(1); sortie de retour ; } ;

Voir la vidéo: Openlayers 6 Tutorial #9 - Interaction With Vector Features