Google maps 谷歌地图计算一个将两个已知标题平分的标题

Google maps 谷歌地图计算一个将两个已知标题平分的标题,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我正在使用谷歌地图中的google.maps.geometry.spheremic.computeHeading方法来计算JS中多边形路径的标题 我想做的是计算两个标题之间的标题 例如,如果第一条路径的标题是45,第二条路径的标题是135,那么我要查找的标题应该是90。或者如果第一个标题是350,第二个是90,那么我要找的标题是40 我知道我在这里缺少一些基本的几何知识(我在学校数学从来都不好) 此外,如果有人知道一种更优雅的方法来获取多边形两条路径之间的标题,我愿意接受建议 更新 我真的找到了

我正在使用谷歌地图中的
google.maps.geometry.spheremic.computeHeading
方法来计算JS中
多边形路径的标题

我想做的是计算两个标题之间的标题

例如,如果第一条路径的标题是45,第二条路径的标题是135,那么我要查找的标题应该是90。或者如果第一个标题是350,第二个是90,那么我要找的标题是40

我知道我在这里缺少一些基本的几何知识(我在学校数学从来都不好)

此外,如果有人知道一种更优雅的方法来获取多边形两条路径之间的标题,我愿意接受建议

更新 我真的找到了解决问题的方法。这不是很优雅,但它与前面问题的答案非常相似

  /*
   * h1 = first heading
   * h2 = second heading
   *
   */
  if (h1 < 0) {
    h1 = 360 - Math.abs(h1);
  }

  h2 = (h2 >= 180) ? h2 - 180 : h2 + 180;

  // get average of both headings (i.e. the middle)
  bisect = ((h2 + h1) / 2);

  // if bisect is > than the h1, we need the inverse
  if (bisect > h1) {
    bisect = bisect -180;
  }
/*
*h1=第一航向
*h2=第二航向
*
*/
如果(h1<0){
h1=360-数学绝对值(h1);
}
h2=(h2>=180)?h2-180:h2+180;
//获取两个标题(即中间标题)的平均值
对分=((h2+h1)/2);
//如果二分法大于h1,则需要求逆
如果(对分>h1){
对分=对分-180;
}
基本答案:

将所有数字保持在-180到+180之间,计算最短距离(将小于180;180是一种特殊情况,它有两个答案,两个方向都垂直于该线)

假设中心线位于两条线的公共点,Angle1 Marker和Angle2 Marker从该点开始画线

var hdg1 = google.maps.geometry.spherical.computeHeading(centerMark.getPosition(), angle1marker.getPosition());
var hdg2 = google.maps.geometry.spherical.computeHeading(centerMark.getPosition(), angle2marker.getPosition());
if (hdg1 > 180) hdg1 -= 360;
if (hdg1 <= -180) hdg1 += 360;
if (hdg2 > 180) hdg2 -= 360;
if (hdg2 <= -180) hdg2 += 306;

var deltaHdg =  (hdg1 - hdg2);
if (deltaHdg > 180) deltaHdg -= 360;
if (deltaHdg <= -180) deltaHdg += 360;

var bisectHdg = deltaHdg / 2 + hdg2;
var bisectPosn = google.maps.geometry.spherical.computeOffset(centerMark.getPosition(), 1000, bisectHdg);


您的代码看起来像什么?第二个角度为什么是50?不应该是40吗?哎呀。是的,应该是40。你的代码运行得很好。但是,不可能移动中心标记。将其更改为可拖动时-可以移动。但是,只有对分线将正确更新。角线将继续“记住”地图中心作为原点。我注意到添加
centerMark.bindTo('position',poly1.binder,'0')帮助,更新两行中的1行。但是不能添加
centerMark.bindTo('position',poly2.binder,'0')以更新两行。