在谷歌地图android中使多边形垂直于轴承

时间:2014-03-22 23:46:49

标签: java android google-maps google-maps-android-api-2 polygon

我在地图上创建多边形

 getMap().addPolygon(
            getPolygonOptions(point1, point2, widthInMeters)
                    .fillColor(Color.YELLOW));

角落的位置由以下公式计算:

public static PolygonOptions getPolygonOptions(LatLng point1, LatLng point2, double widthInMeters) {


    double distance  = SphericalUtil.computeDistanceBetween(point1, point2) + 6;

   float bearing = location.getBearing();

    double bears = bearing;


    LatLng corner1 = SphericalUtil.computeOffset(point2, widthInMeters / 2, bears + 90);
    LatLng corner2 = SphericalUtil.computeOffset(point2, widthInMeters / 2, bears - 90);
    LatLng corner3 = SphericalUtil.computeOffset(corner2, distance, bears);
    LatLng corner4 = SphericalUtil.computeOffset(corner1, distance, bears);

    return new PolygonOptions().add(corner1, corner2, corner3, corner4);
}

目的是使多边形垂直于轴承。地图上的某些方向的多边形几乎就是这样,但正如您在此图中所看到的,在某些方向上,与当前方位相比,多边形最终倾斜。当前轴承由蓝色箭头和品红色折线表示。任何人都可以确定我的角落计算有什么问题吗?

wrong angles

1 个答案:

答案 0 :(得分:0)

可能是从两个功能返回的单位的问题。

此处,SphericalUtil.computeDistanceBetween(point1,point2)返回以米为单位的值。

Google的位置文档显示,

location.getBearing()以度为单位返回值。

获得轴承,以度为单位。 轴承是该设备的水平行进方向,与设备方向无关。如果设备有轴承,则保证在(0.0,360.0)范围内。

如果此位置没有方位,则返回0.0。

请在使用location.getBearing()

之前检查位置是否正在承载

因此,您已将这些度数转换为米,然后在您的逻辑中实现它。它将解决您的问题。