给定两个点坐标计算矩形坐标android

时间:2018-03-22 17:26:05

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

我的数据库坐标是

 (x,y) ->   (37.18312184219552, -122.5216064453125), (37.74655686277364, -122.63720703125).

我需要找到传递给此函数的等效矩形边界。

Polygon polygon = map.addPolygon(new PolygonOptions()
        .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0))
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE));

必填结果:

enter image description here

当我这样做时,它显示两行而不是矩形。

points.add(new LatLong(x,y)); <-- x and y passed from given coordinates
googleMap.addPolygon(new PolygonOptions()
                                .addAll(points)
                                .strokeColor(Color.RED)
                                .fillColor(Color.BLUE));

获得的结果:

enter image description here

JS具有计算矩形边界的功能,但Google Maps Android API似乎没有任何功能或方法。任何人都可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

也许是因为你只为多边形添加了2个点?如果是这样,则2个点标记所需矩形的对角线 - 您需要矩形的其他2个角。这里的代码将创建矩形缺失的2个点并绘制矩形:

public static Polygon drawRectangle(Context context,
                                    GoogleMap googleMap,
                                    LatLng latLng1,
                                    LatLng latLng2,
                                    int strokeWidth,
                                    int strokeColor,
                                    int fillColor) {
    Polygon polygon = null;

    if (context != null && googleMap != null && latLng1 != null && latLng2 != null) {
        // create the other 2 points of the rectangle
        LatLng latLng3 = new LatLng(latLng1.latitude, latLng2.longitude);
        LatLng latLng4 = new LatLng(latLng2.latitude, latLng1.longitude);

        googleMap.addPolygon(new PolygonOptions()
                .add(latLng1)
                .add(latLng3)
                .add(latLng2)
                .add(latLng4)
                .strokeWidth(strokeWidth)
                .strokeColor(strokeColor)
                .fillColor(fillColor));
    }

    return polygon;
}

你这样称呼它:

    Polygon polygon = drawRectangle(context,googleMap,
            latLng,marker.getPosition(),
            8,Color.BLACK,Color.parseColor("#44444444"));