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)));
我有一个地图视图,它会填满整个屏幕。在地图顶部,我有一个 "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)));