Dans l'image ci-dessous, vous pouvez voir qu'il y a 3 lignes tirées d'un point (le cercle noir) à ses 3 points liés ().
IMAGE
QUESTION
Comment calculer la latitude et la longitude entre les points le long de chaque ligne, en utilisant un pourcentage de la distance entre les deux points?
Par exemple, si je voulais obtenir le poste pour pouvoir dessiner des cercles supplémentaires le long de chaque ligne avec une différence de 20%?
QUEL CODE J'AI AUSSI
var data = [ { "coords" : [ 53.409045, -2.985406 ]}, { "coords" : [ 53.408747, -2.982862 ]}, { "coords" : [ 53.407630, -2.984136 ]}, { "coords" : [ 53.407142, -2.986931 ]} ]; var pointA = new L.LatLng(53.409045, -2.985406); var pointB; data.forEach(function(d) { pointB = new L.LatLng(d.coords[0], d.coords[1]); L.polyline([pointA, pointB]).addTo(map); L.circle([d.coords[0], d.coords[1]], 10).addTo(map); });
La seule chose que le code ci-dessus fait est de tracer un cercle pour chaque point et une ligne du cercle principal (pointA) vers les autres cercles (point B)
J'ai à peu près besoin de savoir comment calculer plusieurs coordonnées, en pourcentage de distance, entre le point A et ses points connexes.
Je dois m'assurer que tout le cercle vert se trouve à la même distance du cercle central
CODEPEN POUR TESTER AVEC
Codepen Link
EDIT – IMAGES DE CE QUI J'AI AYANT AUCUNE FONCTION DE LA RÉPONSE CORRECTE CI-DESSOUS
Avertissement: cela fonctionne sur une coordonnée linéaire. Comme l'a mentionné Ollie Jones, alors qu'il s'agit d'une approximation raisonnable pour de courtes distances (ou pour certains cas selon votre projection), cela ne fonctionnera pas à grande distance ou si vous voulez un point très précis à un pourcentage
La fonction que vous recherchez est pointAtPercent. Le rouge est le point de départ (votre cercle central) et vert le point final (vos cercles de fin)
var ctx = document.getElementById("myChart").getContext("2d"); function drawPoint(color, point) { ctx.fillStyle = color; ctx.beginPath(); ctx.arc(point.x, point.y, 5, 0, 2 * Math.PI, false); ctx.fill(); } function drawLine(point1, point2) { ctx.strokeStyle = 'gray'; ctx.setLineDash([5, 5]); ctx.beginPath(); ctx.moveTo(point1.x, point1.y); ctx.lineTo(point2.x, point2.y); ctx.stroke(); } function pointAtPercent(p0, p1, percent) { drawPoint('red', p0); drawPoint('green', p1); drawLine(p0, p1); var x; if (p0.x !== p1.x) x = p0.x + percent * (p1.x - p0.x); else x = p0.x; var y; if (p0.y !== p1.y) y = p0.y + percent * (p1.y - p0.y); else y = p0.y; var p = { x: x, y: y }; drawPoint('blue', p); return p; } pointAtPercent({ x: 50, y: 25 }, { x: 200, y: 300 }, 0.2) pointAtPercent({ x: 150, y: 25 }, { x: 300, y: 100 }, 0.6) pointAtPercent({ x: 650, y: 300 }, { x: 100, y: 400 }, 0.4)
Fiddle – https://jsfiddle.net/goev47aL/
Consultez cette page pour vos différentes équations. http://www.movable-type.co.uk/scripts/latlong.html
Utilisez le roulement à partir du n ° 1, la distance du n ° 2 et de l'origine pour obtenir le lieu résultant
function destination(lat, lon, bearing, distance) { var R = 6378.1, lat, lon, latDest, lonDest; // convert to radians lat = lat * (Math.PI / 180); lon = lon * (Math.PI / 180); bearing = bearing * (Math.PI / 180); latDest = Math.asin(Math.sin(lat) * Math.cos(distance / R) + Math.cos(lat) * Math.sin(distance / R) * Math.cos(bearing)); lonDest = lon + Math.atan2(Math.sin(bearing) * Math.sin(distance / R) * Math.cos(lat), Math.cos(distance / R) - Math.sin(lat) * Math.sin(latDest)); return [latDest * (180 / Math.PI), lonDest * (180 / Math.PI)]; }