可以通过计算相邻两个点的中点来获得折线的折中点。具体操作如下:

  1. 遍历折线上的每个点,计算相邻两个点的中点:
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;
}
  1. 根据中点计算折中点。如果折线是偶数个点,则折中点为相邻两个中点的中点;如果折线是奇数个点,则折中点为中间的那个中点:
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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录