2014-05-13 60 views

回答

0

使用的MapView的pointForCoordinate方法,看是否路徑的特定點是在屏幕

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

謝謝..我會盡快測試 –

5

的路徑是由座標上。而且mapview有一個可見的區域。 您可以輕鬆地檢查,如果一個座標是一個地區甚至eithout要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

感謝您的回答.. –

1

這取決於你如何準確地需要它。

Daij-Djan's answer使用可見區域的軸對齊邊界框,如果視圖旋轉/傾斜,該邊界框將大於實際區域。

Sunny Shah's answer會更準確,因爲它將完全適合視圖的可見區域。但是它可能會比較慢,因爲它必須將每個點投影到屏幕座標中。

這兩個答案只檢查路徑上的點是否在可見區域內。如果您在穿過可見區域的路徑中有一條線,但兩個頂點位於可見區域之外,則這兩個答案都會將路徑報告爲不可見。爲了解決這個問題,你需要一些線對箱碰撞測試。

相關問題