Bir koordinat anda görülebilir harita bölgede olup olmadığını nasıl belirliyorsunuz?

oy
2

Ben birkaç yüz yerlerin listesini ve sadece ekranda şu anda, bu yerler için bir MKPinAnnotation görüntülemek istiyor. Ekranda 2 millik ile kullanıcının mevcut konumu ile başlar. Tabii ki, kullanıcı ilerleyin ve ekranda yakınlaştırma yapabilirsiniz. Şu anda, bir harita güncelleme olayı için bekleyin ve döngü konumum listesi üzerinden ve bunun gibi koordinatlarını kontrol edin:

-(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 */
  }

(Ben çok mümkün bu yöntemi yanlış sürece) noktası ekranda nerede olacağını yüzden convertCoordinate soruyorum. koordinat ekranda değilse, o zaman ben MapView eklemek asla.

Benim soru, bu bir konum en / lat uzun geçerli görünümde görünecek ve MapView eklenmelidir olmadığını belirlemek için doğru yolu nedir? Ya da farklı bir şekilde yapıyor olmalıdır?

Oluştur 29/07/2009 saat 00:59
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
7

Kodunuzda, sizin için bir görünüm geçirmesi gerektiğini toPointToView:seçeneği. Ben benim verdi mapView. Sen de x ve y için bir üst sınır belirtmek gerekir.

İşte benim için çalıştı bazı kodu (ek açıklama döngü sırasında, bana harita üzerinde şu anda görünür açıklamaları anlattı) var:

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);
    }
}
Cevap 04/02/2010 saat 05:47
kaynak kullanıcı

oy
3

Bunun ardından kullanılabilir geri neyin emin eski bir iplik olmadığını bilmeleri ... Ama doğrusu yapmalıdır:

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

    // Do your stuff

}

ekran alanı geri dönüştürmek gerek yok. Ayrıca Bunu yapmaya çalışıyorsun nedeni emin değilim, ben bu ekranda değilken, açıklama ekleme değil garip olduğunu düşünüyorum ... MapKit görülebilir açıklama görüşlerini zaten bu optimize eder ve yalnızca oluşturur (ve geri dönüştürür) .

Cevap 22/10/2015 saat 19:12
kaynak kullanıcı

oy
2

okuma biraz sonra bu kötü bir fikir olduğunu söylüyor şey bulamıyorum. Benim app test biraz yaptık ve ben her zaman doğru sonuçlar elde ederler. app yükler çok daha hızlı sadece 300 + kerede koordinatları bütün yerine şu anda görünür haritası bölgede görünecektir koordinatlarını eklediğinizde.

Ne arıyordu [MapView isCoordinateInVisibleRegion: myCoordinate] gibi bir yöntem, ama şimdiye kadar bu yöntem hızlı ve doğru görünüyor.

Ben de yanlış başlık benim anlam karıştırmış olabileceği düşünüyorum çünkü yerine önceki bir "görülebilir harita bölgede" okuma başlığı değiştirdik.

Cevap 10/08/2009 saat 14:09
kaynak kullanıcı

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