Как мога да получа видимите маркери в Google Maps v2 в Android?

Как мога да получа видимите маркери в Google Maps v2 за Android? Знам, че мога да използвам Projection и да премахна точки ‹ 0 и точки > размер на екрана. Но не искам да проверявам един по един, може да е твърде бавно, ако имам много маркери. Има ли лесен начин? Или някакво готово решение? Ако да, кой?


person Felipe    schedule 18.07.2013    source източник


Отговори (4)


Добре, следното е кодът, който използвах преди, за да определя какво може да види потребителят и след това да начертая само маркерите, които са видими. Мисля, че може да успеете да го адаптирате към вашата цел.

вземете текущия правоъгълник "viewport" на картата (забележка: трябва да се изпълнява в главната нишка)

    this.mLatLngBounds = this.mMap.getProjection().getVisibleRegion().latLngBounds;

сортирайте 2-те точки (горе вляво и долу-вдясно), за да можем да използваме логиката min/max

double lowLat;
double lowLng;
double highLat;
double highLng;

if (this.mLatLngBounds.northeast.latitude < this.mLatLngBounds.southwest.latitude)
{
lowLat = this.mLatLngBounds.northeast.latitude;
highLat = this.mLatLngBounds.southwest.latitude;
}
else
{
highLat = this.mLatLngBounds.northeast.latitude;
lowLat = this.mLatLngBounds.southwest.latitude;
}
if (this.mLatLngBounds.northeast.longitude < this.mLatLngBounds.southwest.longitude)
{
lowLng = this.mLatLngBounds.northeast.longitude;
highLng = this.mLatLngBounds.southwest.longitude;
}
else
{
highLng = this.mLatLngBounds.northeast.longitude;
lowLng = this.mLatLngBounds.southwest.longitude;
}

тогава в моя случай имах тези данни в db, така че можех да използвам >= и ‹=, за да извлека само щифтовете, които исках

person Corey Scott    schedule 19.07.2013
comment
this.mMap.getProjection().getVisibleRegion() е отговорът! Толкова е лесно, не знам как не можах да го разбера преди. Благодаря! - person Felipe; 19.07.2013

Можете да използвате библиотеката android-map-extension. Наред с други предлага метод List GoogleMap.getDisplayedMarkers().

person Stefan    schedule 29.07.2013

Можете да добавите тази функция за разширение към клас GoogleMap, ако използвате Kotlin

fun GoogleMap.isMarkerVisible(markerPosition: LatLng) =
        projection.visibleRegion.latLngBounds.contains(markerPosition)

Просто предавате позицията на маркера като параметър на този метод и правите каквото искате с резултата.

Ако използвате Java, можете просто да декларирате функцията, където е по-подходящо за вас.

Дано помогне!

person Emilio Quattrocchio    schedule 08.08.2019
comment
Страхотен, благодаря - person HasH; 24.03.2021

Търсите маркери: https://developers.google.com/maps/documentation/android/marker

private GoogleMap mMap;
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
mMap.addMarker(new MarkerOptions()
    .position(new LatLng(0, 0))
    .title("Hello world"));

Или директно чертане: https://developers.google.com/maps/documentation/android/shapes

// Instantiates a new Polyline object and adds points to define a rectangle
PolylineOptions rectOptions = new PolylineOptions()
    .add(new LatLng(37.35, -122.0))
    .add(new LatLng(37.45, -122.0))  // North of the previous point, but at the same longitude
    .add(new LatLng(37.45, -122.2))  // Same latitude, and 30km to the west
    .add(new LatLng(37.35, -122.2))  // Same longitude, and 16km to the south
    .add(new LatLng(37.35, -122.0)); // Closes the polyline.

// Get back the mutable Polyline
Polyline polyline = myMap.addPolyline(rectOptions); 
person Corey Scott    schedule 19.07.2013
comment
Здравей @CoreyScott, благодаря за отговора ти, но мисля, че не разбра въпроса ми или не се изразих добре. Вече имам екземпляр на карта, вече добавих много маркери. Но представете си, че потребителят промени квадранта на картата и сега искам да получа маркерите, които потребителят гледа. Може да са няколко маркера или дори нула. сега разбрахте ли - person Felipe; 19.07.2013