Android mapview - 如何获取地图选定部分的中心?

Android mapview - how to get the center of a selected part of the map?

我有一个地图视图,它会填满整个屏幕。在地图顶部,我有一个 "show and hide area",其中包含一些详细信息,例如:

在这种情况下,我想在地图上的特定位置(纬度、经度)上显示一个标记。 我的问题是让标记始终可见,所以当显示 "show and hide area" 时,标记应该在底部地图的可见区域(在红色框中标记)。现在标记显示在 "show and hide area" 后面(在地图的中心)。 通过执行以下操作,我只能获得以像素(高度)为单位的 mapview 区域:(height_of_map) - (height_of_details_area)。但是当我使用 animateCamera 方法时,这对我没有太大帮助,因为这需要经纬度..

这是我设置标记并将相机设置为动画的代码:

    private void setMarkerOnMap(double latitude, double longitude) {
    if (marker == null) {
        CameraUpdate zoom = CameraUpdateFactory.zoomTo(12.0f);
        map.animateCamera(zoom);
        marker = map.addMarker(new MarkerOptions().position((new LatLng(latitude, longitude))));
        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.pin_blue));
    } else {
        marker.setPosition(new LatLng(latitude, longitude));
    }

    CameraUpdate center = CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 12.0f);
    map.animateCamera(center);
}

我希望任何人都能理解问题并知道如何解决它。

(是的,当我 show/hide 细节区域时,我考虑过调整地图大小,但我发现这个解决方案有点 "ugly")

试试这个

map.getCameraPosition().target

在地图 api 中,目标是 'The location that the camera is pointing at'。

我自己找到了方法。我希望这对其他人有用:

private void setMarkerOnMap(double latitude, double longitude) {

        if (marker == null) {
            marker = map.addMarker(new MarkerOptions().position((new LatLng(latitude, longitude))));
            marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.pin_blue));
        } else {
            marker.setPosition(new LatLng(latitude, longitude));
        }

        Projection projection = map.getProjection();
        LatLng markerLatLng = new LatLng(marker.getPosition().latitude, marker.getPosition().longitude);

        Point markerScreenPosition = projection.toScreenLocation(markerLatLng);
        Point pointHalfScreenAbove = new Point(markerScreenPosition.x, (markerScreenPosition.y - (mapViewHeightFull / 2)) + mapViewHeightHalfPart);
        LatLng aboveMarkerLatLng = projection.fromScreenLocation(pointHalfScreenAbove);

        CameraUpdate camPosition = CameraUpdateFactory.newLatLngZoom(aboveMarkerLatLng, defaultZoom);

        map.animateCamera(camPosition);
    }

mapViewHeightHalfPart变量,是问题中红框区域高度的一半。

第一步,您需要获取地图容器的引用,并通过除以 2 的宽度和高度来计算中心点。

 View containerView=findViewById(R.id.mapContainer);        
 LatLng centerPoint=   this.map.getProjection().fromScreenLocation(new Point(((int)containerView.getWidth/2),((int)(containerView.getHeight/2)));