如何确定当前可视区域中是否显示了一个地址点?

说我在我的Android应用程序中有mapview控件。 如果我知道某个经纬度的地标存在,我怎么能确定这个地标目前是否在用户的屏幕上可见? 有没有一种方法获得可见区域的左上angular和右下angular的坐标?

Solutions Collecting From Web of "如何确定当前可视区域中是否显示了一个地址点?"

您可以将GeoPoint投影到点,并通过(0,屏幕高度)检查它是否为框(0,屏幕宽度)

请参阅: https : //developer.android.com/reference/com/google/android/gms/maps/Projection.html

像这样的事情会做的伎俩。

private boolean isCurrentLocationVisible() { Rect currentMapBoundsRect = new Rect(); Point currentDevicePosition = new Point(); GeoPoint deviceLocation = new GeoPoint((int) (bestCurrentLocation.getLatitude() * 1000000.0), (int) (bestCurrentLocation.getLongitude() * 1000000.0)); mapView.getProjection().toPixels(deviceLocation, currentDevicePosition); mapView.getDrawingRect(currentMapBoundsRect); return currentMapBoundsRect.contains(currentDevicePosition.x, currentDevicePosition.y); } 

在 这里和这里join提示:

以下是我的CustomMapView的完整代码:

 package net.alouw.alouwCheckin.ui.map; import android.content.Context; import android.util.AttributeSet; import android.util.Pair; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView; /** * @author Felipe Micaroni Lalli (micaroni@gmail.com) */ public class CustomMapView extends MapView { public CustomMapView(Context context, String s) { super(context, s); } public CustomMapView(Context context, AttributeSet attributeSet) { super(context, attributeSet); } public CustomMapView(Context context, AttributeSet attributeSet, int i) { super(context, attributeSet, i); } /** * * @return a Pair of two pairs with: top right corner (lat, lon), bottom left corner (lat, lon) */ public Pair<Pair<Double, Double>, Pair<Double, Double>> getMapCorners() { GeoPoint center = getMapCenter(); int latitudeSpan = getLatitudeSpan(); int longtitudeSpan = getLongitudeSpan(); double topRightLat = (center.getLatitudeE6() + (latitudeSpan / 2.0d)) / 1.0E6; double topRightLon = (center.getLongitudeE6() + (longtitudeSpan / 2.0d)) / 1.0E6; double bottomLeftLat = (center.getLatitudeE6() - (latitudeSpan / 2.0d)) / 1.0E6; double bottomLeftLon = (center.getLongitudeE6() - (longtitudeSpan / 2.0d)) / 1.0E6; return new Pair<Pair<Double, Double>, Pair<Double, Double>>( new Pair<Double, Double>(topRightLat, topRightLon), new Pair<Double, Double>(bottomLeftLat, bottomLeftLon)); } } 

好吧,因为我花了一些时间才find一个简单的工作解决scheme,我会在这里贴出来,在我之后;)在你自己的MapView的子类中使用下面:

 GeoPoint topLeft = this.getProjection().fromPixels(0, 0); GeoPoint bottomRight = this.getProjection().fromPixels(getWidth(),getHeight()); 

这就是所有,那么你可以通过获取坐标

 topLeft.getLatitudeE6() / 1E6 topLeft.getLongitudeE6() / 1E6 

 bottomRight.getLatitudeE6() / 1E6 bottomRight.getLongitudeE6() / 1E6