Obtenez des points de latitude et de longitude sur une ligne entre deux points, en pourcentage

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

Entrez la description de l'image ici

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

Entrez la description de l'image ici Entrez la description de l'image ici

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

  1. Obtenez une distance et un port d'origine à destination.
  2. Convertir le pourcentage en distance dans les unités applicables.
  3. 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)]; }