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

时间:2015-10-08 08:10:10

标签: java android google-maps android-mapview

我有一个填充屏幕的mapview。在地图上方,我有一个"显示和隐藏区域"有一些细节如下:

enter image description here

在这种情况下,我想在地图上的特定位置(纬度,经度)上显示标记。 我的问题是始终使标记可见,所以当"显示和隐藏区域"如图所示,标记应位于底部地图的可见区域(标记在红色框中)。现在,标记显示在"显示和隐藏区域" (在地图的中心)。 通过执行以下操作,我只能以像素(高度)获得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);
}

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

(是的,当我显示/隐藏细节区域时,我已经考虑过调整地图的大小,但我发现这个解决方案有点"丑陋")

3 个答案:

答案 0 :(得分:0)

试试这个

map.getCameraPosition().target

在地图api中,目标是'相机指向的位置'。

答案 1 :(得分:0)

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

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 :(得分:0)

在第一步,您需要获得地图容器的referance,并通过划分2宽度和高度来计算中心点。

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