Hogyan határozzák meg, ha a koordináta a jelenleg látható térkép régióban?

szavazat
2

Van egy lista több száz helyszínen, és csak szeretnénk megjeleníteni egy MKPinAnnotation az ezeken a helyeken jelenleg a képernyőn. A képernyő kezdődik a felhasználó aktuális tartózkodási helyét egy 2 mérföldes körzetben. Természetesen, a felhasználó görgetni és zoom a képernyőn. Most várok egy térképet frissítés eseményt, majd végigjárjuk a Saját hely listát, és ellenőrizze a koordinátákat, mint ez:

-(void)mapViewDidFinishLoadingMap:(MKMapView *)mapView {
  CGPoint point;
  CLLocationCoordinate2D coordinate;

  . . .
  /* in location loop */
  coordinate.latitude = [nextLocation getLatitude];
  coordinate.longitude = [nextLocation getLongitude];

  /* Determine if point is in view. Is there a better way then this? */
  point = [mapView convertCoordinate:coordinate toPointToView:nil];
  if( (point.x > 0) && (point.y>0) ) {
    /* Add coordinate to array that is later added to mapView */
  }

Tehát kérem convertCoordinate ahol a pont lenne a képernyőn (kivéve, ha azt félreértik ezt a módszert, ami nagyon is lehetséges). Ha a koordináta nem látható a képernyőn, akkor soha nem adja hozzá a mapView.

Szóval a kérdés, ez a helyes módja annak meghatározására, hogy az adott hely földrajzi szélesség / hosszúság tűnik a jelenlegi nézet és hozzá kell adni a az mapView? Vagy kéne ezt másképp?

A kérdést 29/07/2009 00:59
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
7

A kódban, akkor át kell mennie a céllal, hogy az toPointToView:opciót. Adtam én mapView. Meg kell adni egy felső korlátot az x és y is.

Itt van néhány kód, amely dolgozott nekem (azt mondta, a jelenleg látható jelöléseket a térképen, míg átkötése a kommentár):

for (Shop *shop in self.shops) {
    ShopAnnotation *ann = [ShopAnnotation annotationWithShop:shop];
    [self.mapView addAnnotation:ann];

    CGPoint annPoint = [self.mapView convertCoordinate:ann.coordinate 
            toPointToView:self.mapView];

    if (annPoint.x > 0.0 && annPoint.y > 0.0 && 
            annPoint.x < self.mapView.frame.size.width && 
            annPoint.y < self.mapView.frame.size.height) {
        NSLog(@"%@ Coordinate: %f %f", ann.title, annPoint.x, annPoint.y);
    }
}
Válaszolt 04/02/2010 05:47
a forrás felhasználó

szavazat
3

Tudom, hogy ez egy régi téma, nem biztos, hogy mi volt elérhető, majd vissza ... De inkább nem:

// -- Your previous code and CLLocationCoordinate2D init --
MKMapRect visibleRect = [mapView visibleMapRect];
if(MKMapRectContainsPoint(visibleRect, MKMapPointForCoordinate(coordinate))) {

    // Do your stuff

}

Nem kell konvertálni vissza a helyet a képernyőn. Szintén nem vagyok biztos, hogy miért próbál csinálni ezt, azt hiszem, ez a furcsa, hogy nem hozzá megjegyzéseket, ha azok nem a képernyőn ... MapKit már optimalizálja ezt, és csak akkor hoz létre (és újrahasznosítja) feliratozást nézetek témához .

Válaszolt 22/10/2015 19:12
a forrás felhasználó

szavazat
2

Miután egy kis olvasás nem találok semmit, hogy azt mondja, hogy ez egy rossz ötlet. Tettem egy kis tesztelés az én app, és én mindig helyes eredményt. Az alkalmazás terhelés sokkal gyorsabban, amikor csak hozzá, hogy a koordinátákat mutatja ki a jelenleg látható térkép régió helyett a 300+ koordináták egyszerre.

Amit keres, az éppen olyan módszerrel, mint [mapView isCoordinateInVisibleRegion: myCoordinate], de eddig ez a módszer gyors és pontos tűnik.

Én is változott a cím olvasható: „a látható térkép régió” helyett a korábbi, mert azt hiszem, a nem megfelelő cím lehet összekeverni gondolok.

Válaszolt 10/08/2009 14:09
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more