JavaScript 计算折线折中点,无需地图 API
可以通过计算相邻两个点的中点来获得折线的折中点。具体操作如下:
- 遍历折线上的每个点,计算相邻两个点的中点:
function getMidPoints(points) {
var midPoints = [];
for (var i = 0; i < points.length - 1; i++) {
var midPoint = {
lng: (points[i].lng + points[i + 1].lng) / 2,
lat: (points[i].lat + points[i + 1].lat) / 2
};
midPoints.push(midPoint);
}
return midPoints;
}
- 根据中点计算折中点。如果折线是偶数个点,则折中点为相邻两个中点的中点;如果折线是奇数个点,则折中点为中间的那个中点:
function getMidPoint(points) {
var midPoints = getMidPoints(points);
if (midPoints.length % 2 === 0) {
var midIndex = midPoints.length / 2 - 1;
return {
lng: (midPoints[midIndex].lng + midPoints[midIndex + 1].lng) / 2,
lat: (midPoints[midIndex].lat + midPoints[midIndex + 1].lat) / 2
};
} else {
var midIndex = Math.floor(midPoints.length / 2);
return midPoints[midIndex];
}
}
通过以上两个函数,可以计算出任意折线的折中点。例如,对于下面的折线:
var points = [
{ lng: 116.397428, lat: 39.90923 },
{ lng: 116.39757, lat: 39.908692 },
{ lng: 116.397852, lat: 39.9085 },
{ lng: 116.398035, lat: 39.908477 },
{ lng: 116.398237, lat: 39.908544 },
{ lng: 116.398436, lat: 39.908648 },
{ lng: 116.398715, lat: 39.908462 },
{ lng: 116.398969, lat: 39.908345 },
{ lng: 116.399138, lat: 39.908279 },
{ lng: 116.399413, lat: 39.908203 }
];
可以调用 getMidPoint(points) 函数来获取折中点:
var midPoint = getMidPoint(points);
console.log(midPoint); // {lng: 116.398146, lat: 39.908596}
原文地址: https://www.cveoy.top/t/topic/oYV3 著作权归作者所有。请勿转载和采集!