Примечание: я предполагаю, что вам нужен список точек на линии между А и В
Следующий код будет выполняться независимо от того, как две точки связаны друг с другомт. е. если значение latA больше или меньше значения latB, а значение lonA больше или меньше значения lonB в любой комбинации
Это может быть немного запутанным, использование "целых чисел" может быть немного чрезмерным, но это должнодать вам представление о том, как действовать
var latA=32.718835,
lonA=-16.761171,
latB=32.711461,
lonB=-16.911347,
lat = Math.floor(latA * 1e6), // use integers
lon = Math.floor(lonA * 1e6),
count = Math.floor(Math.abs(latA-latB)*1e6)+1, // count is always positive, and we add 1 so the following is correct
lonDiff = (lonB-lonA) / count * 1e6, // this can be either positive or negative, we don't care, it's multiplied by 1e6 so we use integers
latSign = Math.sign(latB - latA), // so we go in the right direction
arr = [];
for (let i = 0; i <= count; i++) { // use <= so we have both A and B in the array
arr.push({
lat: (lat / 1e6).toFixed(6),
lon: (lon / 1e6).toFixed(6)
});
lat += latSign;
lon += lonDiff;
}
console.log(arr[0], arr.slice(-1)); // just to show that first/last points are correct
Однако с использованием этого кода количество точек всегда определяется разницей в широте - в этом случае для каждого 1/1000000 градуса широты примерно 20/ 1000000 градусов изменения долготы - не уверен, если вы хотите интерполировать точки, зависящие от наибольшей или наименьшей разницы в широте или долготе
Этот код ниже обобщенный - как есть, он выберет большую разницу дляцикл - комментарии в коде показывают два места, которые нужно изменить, чтобы заставить его вести себя точно так же, как приведенный выше код
var latA=32.718835,
lonA=-16.761171,
latB=32.711461,
lonB=-16.911347,
lat = Math.floor(latA * 1e6), // use integers
lon = Math.floor(lonA * 1e6),
countLat = Math.floor(Math.abs(latA-latB)*1e6)+1,
countLon = Math.floor(Math.abs(lonA-lonB)*1e6)+1,
count = Math.max(countLat, countLon), // change to Math.min to use least number of points
lonDiff = (lonB-lonA) / countLat * 1e6,
latDiff = (latB-latA) / countLon * 1e6,
latSign = Math.sign(latB - latA),
lonSign = Math.sign(lonB - lonA),
arr = [];
if (countLat < countLon) { // change to > to use least number of points
lonDiff = lonSign;
} else {
latDiff = latSign;
}
for (let i = 0; i <= count; i++) {
arr.push({
lat: (lat / 1e6).toFixed(6),
lon: (lon / 1e6).toFixed(6)
});
lat += latDiff;
lon += lonDiff;
}
console.log(arr.length, arr[0], arr.slice(-1)[0]);