计算围绕中心的五边形的经纬度

时间:2019-01-01 19:51:24

标签: javascript math latitude-longitude

我正在寻找一种方法来检索五个点,这些点将在给定的中心和给定的距离周围形成一个五边形。

类似这样的东西:

getPentagonPoints = (latlng, distance) => {
  var pentagonLatLng = [];
  //magic calculations goes here
  return pentagonLatLng;
}

1 个答案:

答案 0 :(得分:0)

您可以这样做:

function getPentagonPoints(latlng, distance) {
  var pentagonLatLng = [];
  for (let i = 0; i < 5; i++) {
    // Pi * 2 is 360 degrees, in radians
    // We add 270 degrees (Pi * 1.5 radians) to start at the top
    const angle = Math.PI * 2 / 5 * i + Math.PI * 1.5; // in radians
    const lng = distance * Math.cos(angle) + latlng.lng;
    const lat = distance * Math.sin(angle) + latlng.lat;
    pentagonLatLng.push({lat, lng});
  }
  return pentagonLatLng;
}

// Just for the demo
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');

const latLng = { lat: 90, lng: 200 };
const points = getPentagonPoints(latLng, 50);

points.forEach((point, i) => {
  if (i === 0) { ctx.moveTo(point.lng, point.lat); }
  ctx.lineTo(point.lng, point.lat);
  if (i === points.length - 1) { ctx.lineTo(points[0].lng, points[0].lat); }
});

ctx.stroke();
<canvas width="400" height="160"></canvas>