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

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

  • 如何检测Android MapView是否已被平移或缩放?
  • Android Geocoder getFromLocationName始终返回null
  • Keytool别名不存在
  • 为什么9模块graphics在模拟器中正确的大小,而不是在手机上?
  • 奇怪的MapView问题; PixelConverter错误
  • 每当我要求位置更新时,我应该使用android LocationManager.getBestProvider吗?
  • Android MapView总是在嵌套元素中导致OutOfMemoryError
  • 结合图像和文字绘制
  • 您可以将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