如何计算触摸的地图位置周围的边界框?

时间:2015-02-11 16:21:20

标签: android google-maps-android-api-2 android-maps-v2 bounding-box

在我的Android应用程序中,我想要求用户触摸地图的位置数据。 GoogleMap.OnMapClickListener提供触摸位置作为纬度和经度坐标。

public abstract void onMapClick(LatLng point)

为了传递区域而不是点,我需要计算以触摸位置为中心的边界框的坐标。边界框的扩展名取决于地图的缩放级别。

想要请求可见屏幕的边界框 - 只是触摸位置周围的一个小边框区域。

我可以使用任何框架方法吗?否则,如何为边界框的扩展找到合适的距离值

3 个答案:

答案 0 :(得分:0)

不是LatLngBounds你需要什么?

答案 1 :(得分:0)

您可以覆盖onMarkerClick,如下所示

@Override
public boolean onMarkerClick(Marker marker) {

    if (markerClicked) {

        if (polygon != null) {
            polygon.remove();
            polygon = null;
        }

        polygonOptions.add(marker.getPosition());

        polygonOptions.strokeColor(ContextCompat.getColor(getContext(), R.color.colorRedTransparent));
        polygonOptions.fillColor(ContextCompat.getColor(getContext(), R.color.colorBlueTransparent));

        polygonOptions.strokeWidth(5.0f);
        polygon = mMap.addPolygon(polygonOptions);
        polygon.setClickable(true);

    } else {
        if (polygon != null) {
            polygon.remove();
            polygon = null;
        }

        polygonOptions = new PolygonOptions().add(marker.getPosition());
        markerClicked = true;
    }

    return true;
}

传递多边形以生成边界框

public static Rectangle getBoundingBox(Polygon polygon) {

    double boundsMinX = Double.MAX_VALUE; // bottom south latitude of the bounding box.
    double boundsMaxX = Double.MIN_VALUE; // top north latitude of bounding box.

    double boundsMinY = Double.MAX_VALUE; // left longitude of bounding box (western bound).
    double boundsMaxY = Double.MIN_VALUE; // right longitude of bounding box (eastern bound).

    for (int i = 0; i < polygon.getPoints().size(); i++) {
        double x = polygon.getPoints().get(i).latitude;
        boundsMinX = Math.min(boundsMinX, x);
        boundsMaxX = Math.max(boundsMaxX, x);

        double y = polygon.getPoints().get(i).longitude;
        boundsMinY = Math.min(boundsMinY, y);
        boundsMaxY = Math.max(boundsMaxY, y);
    }
     //Rectangle(double left, double bottom, double right, double top)
     return new Rectangle(boundsMinY, boundsMinX, boundsMaxY, boundsMaxX);
}

答案 2 :(得分:-1)

我不确定我是否完全理解你的问题,但通常使用一些方法完成屏幕到地图的坐标,可能是这样的:

Projection projection = googleMaps.getProjection();

Point p = projection.toScreenLocation(point);
LatLng topLeft = projection.fromScreenLocation(new Point(p.x - halfWidth, p.y - halfHeight));
LatLng bottomRight = projection.fromScreenLocation(new Point(p.x + halfWidth, p.y + halfHeight));

修改

上面的

  • point是您在LatLng上收到的onMapClick
  • p是所述点击事件的屏幕位置
  • p.x - halfWidthp.y - halfHeightp.x + halfWidthp.y + halfHeight是点击位置周围的边界框,宽度为2 * halfWidth,高度为2 * halfHeight
  • topLeftbottomRight是纬度 - 经度坐标中点击事件周围的边界框。