我有一个填充屏幕的mapview。在地图上方,我有一个"显示和隐藏区域"有一些细节如下:
在这种情况下,我想在地图上的特定位置(纬度,经度)上显示标记。 我的问题是始终使标记可见,所以当"显示和隐藏区域"如图所示,标记应位于底部地图的可见区域(标记在红色框中)。现在,标记显示在"显示和隐藏区域" (在地图的中心)。 通过执行以下操作,我只能以像素(高度)获得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);
}
我希望任何人都能理解这个问题,并知道如何解决它。
(是的,当我显示/隐藏细节区域时,我已经考虑过调整地图的大小,但我发现这个解决方案有点"丑陋")
答案 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)));