2014-05-13 11 views

risposta

0

utilizzano il metodo della mapview pointForCoordinate per vedere se un determinato punto del percorso sarà sullo schermo

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

Grazie .. Lo testerò presto –

5

Il percorso è costituito da coordinate. E il mapview ha una Regione visibile. Si può facilmente controllare se una coordinata è in una regione eithout andando anche a 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

Grazie per la risposta .. –

1

Dipende da come precisa è necessario che sia.

Daij-Djan's answer utilizza un riquadro di delimitazione allineato all'asse della regione visibile, che sarà più grande della regione effettiva se la vista viene ruotata/inclinata.

Sunny Shah's answer sarà più preciso poiché si adatta esattamente alla regione visibile della vista. Tuttavia sarà probabilmente più lento in quanto deve proiettare ogni punto in coordinate dello schermo.

Entrambe queste risposte controllano solo se un punto del percorso si trova all'interno della regione visibile. Se si ha una linea nel percorso che attraversa la regione visibile ma i due vertici sono al di fuori della regione visibile, entrambe le risposte segnaleranno il percorso come invisibile. Per risolvere questo problema è necessario un test di collisione line-vs-box.

Problemi correlati