2010-02-11 6 views
10

Powiedz, że mam kontrolę widoku mapy w mojej aplikacji na Androida. Jeśli wiem, że punkt orientacyjny istnieje na określonej szerokości i długości geograficznej, jak mogę określić, czy ten punkt orientacyjny jest obecnie widoczny na ekranie użytkownika? Czy istnieje metoda uzyskiwania współrzędnych lewego górnego i prawego dolnego rogu widocznego obszaru?Jak określić, czy geopoint jest wyświetlany w aktualnie widocznym obszarze?

+0

Tip, tylko zwrócić uwagę na to: http://stackoverflow.com/questions/ 2667386/mapview-getlatitudespan-and-getlongitudespan-not-working –

Odpowiedz

6

Coś jak to załatwi.

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); 

    } 
-1

Ok ponieważ zajęło mi trochę czasu, aby dowiedzieć się proste rozwiązanie do pracy będę po to tutaj wszystko po mnie;) W swoim podklasy MapView prostu użyć następujących:

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

To wszystko, a następnie można uzyskać współrzędne poprzez

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

i

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

Proszę przerwać wysyłanie dokładnie tego samego odpowiedź na wiele postów. Jeśli są duplikaty, oznacz je jako takie. Jeśli tak nie jest, dostosuj swoją odpowiedź do postawionego pytania. –

+0

To nie działa. –

1

Łączenie końcówek here, here i here:

Oto pełny kod mojego 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 ([email protected]) 
*/ 
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)); 
    } 
}