2014-05-13 6 views

Odpowiedz

0

pomocą sposobu MapView pointForCoordinate aby sprawdzić, czy dany punkt toru będzie na ekranie

for (int i = 0; i < path.count; i++) { 
      CLLocationCoordinate2D coordinate=[path coordinateAtIndex:i]; 
      CGPoint markerPoint = [mapView_.projection pointForCoordinate:coordinate]; 

      if (markerPoint.x >= 0 && markerPoint.y >= 0 && markerPoint.x <= mapView_.frame.size.width && markerPoint.y <= mapView_.frame.size.height) { 
       NSLog(@"Visible"); 
      } 
     } 
+0

Dzięki .. Wypróbuję to wkrótce –

5

ścieżka składa się z współrzędnych. A widok mapy ma widoczny region. Można łatwo sprawdzić, czy współrzędnych jest w regionie eithout nawet zamiar pixelspace:

- (void)checkPath:(GMSPath*)path { 
    GMSVisibleRegion visibleRegion = _googleMap.projection.visibleRegion; 
    GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithRegion: visibleRegion]; 

    for(int i = 0; i < path.count; i++) { 
     CLLocationCoordinate2D coordinate=[path coordinateAtIndex:i]; 
     if([bounds containsCoordinate:coordinate]) { 
      NSLog("Visible"); 
     } 
    } 
} 
+0

Dzięki za odpowiedź .. –

1

To zależy od tego, jak dokładne trzeba go mieć.

Daij-Djan's answer wykorzystuje wyrównane względem osi pole ograniczające widocznego obszaru, który będzie większy niż rzeczywisty obszar, jeśli widok jest obrócony/przechylony.

Sunny Shah's answer będzie dokładniejszy, ponieważ będzie dokładnie pasował do widocznego regionu widoku. Jednak prawdopodobnie będzie wolniejszy, ponieważ musi rzutować każdy punkt na współrzędne ekranu.

Obie te odpowiedzi sprawdzają tylko, czy punkt na ścieżce znajduje się w widocznym regionie. Jeśli na ścieżce przecinającej widoczny obszar istnieje linia, ale dwa wierzchołki znajdują się poza widocznym obszarem, obie te odpowiedzi będą wskazywać ścieżkę jako niewidoczną. Aby rozwiązać ten problem, potrzebowałbyś jakiegoś testu kolizji liniowej i pudełkowej.