0

我正在使用出色的Google Maps Shapes 库在我的地图上用四个给定点绘制椭圆,问题是椭圆打破了我设想的“矩形/正方形”的边界。

[编辑-更新图像]

有关它如何打破界限的示例,请参见此图:

在此处输入图像描述

粉红色的点是我想要的边界矩形(忽略绿色的)

我如何将这个椭圆保持在这些范围内(这里的目标是它与源自中心的蓝色/绿色和橙色线的外围相匹配。)

[编辑]

一些标记的位置,但这些会根据用户输入而改变

_s.OVAL_MARKERS = [
    // Top
    new google.maps.LatLng(51.583487043925224, -0.16044229844476376),
    // Right
    new google.maps.LatLng(51.58339184515312, -0.16013348842307096),
    // Bottom
    new google.maps.LatLng(51.58317916077958, -0.16026707625337622),
    // Left
    new google.maps.LatLng(51.583331361647325, -0.16064041535150864)
];

我用来创建椭圆的代码(为了清楚起见,为这个帖子修改了变量)

var b = new _g.LatLngBounds();

_s.OVAL_MARKERS.forEach(function (m) {
    b.extend(m);
});

var major_axis = _gs.computeDistanceBetween(
    b.getNorthEast(),
    new _g.LatLng(
        b.getSouthWest().lat(),
        b.getNorthEast().lng()
    )
) / 2;
var minor_axis = _gs.computeDistanceBetween(
    new _g.LatLng(b.getCenter().lat(), b.getSouthWest().lng()),
    new _g.LatLng(b.getCenter().lat(), b.getNorthEast().lng())
) / 2;
4

1 回答 1

1

您的短轴计算完全错误。现在,您正在制作一个将通过所有四个点的椭圆。您需要做的是计算边缘之间的距离,而不是这样做。换句话说:

var minorAxis = _gs.computeDistanceBetween(_m[1], _m[3]);
var majorAxis = _gs.computeDistanceBetween(_m[1], _m[2]);

(假设 1 是连接到 2 和 3 的顶点)

这将为您提供更小的轴长度,这正是您正在寻找的。下一步是定义它的方向。我从来没有在谷歌地图上画过椭圆,所以我不能帮你画那个。

顺便说一下,http: //mathworld.wolfram.com/Ellipse.html获取一些有用的椭圆信息,包括将日食绑定到各种形状的公式列表。

于 2013-05-15T16:12:07.307 回答