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?
Odpowiedz
można rzutować GeoPoint do punktu i sprawdzić, czy jest to pole (0, szerokość ekranu) przez (0, wysokość ekranu)
Patrz: https://developer.android.com/reference/com/google/android/gms/maps/Projection.html
http://developer.android.com/reference/com/google/android/gms/maps/Projection.html dla nowych interfejsów API API – skyman
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);
}
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
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. –
To nie działa. –
Łą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));
}
}
Tip, tylko zwrócić uwagę na to: http://stackoverflow.com/questions/ 2667386/mapview-getlatitudespan-and-getlongitudespan-not-working –