我正在使用伟大的Google Maps Shapes library在我的地图上绘制带有四个给定点的椭圆,麻烦的是椭圆打破了我设想的“矩形/正方形”的边界。
[编辑 - 更新图片]
请参阅此图,了解它如何突破界限:
粉红点是我想要的边界矩形(忽略绿色)
如何将此椭圆保持在这些边界内(此处的目标是匹配源自中心的蓝色/格力和橙色线的外部。)
[编辑]
某些标记的位置,但这些会根据用户输入而改变
_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;
答案 0 :(得分: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,包括将日食绑定到各种形状的公式列表。