Czy można sprawdzić, czy część GMSPath znajduje się w widocznym regionie?Google Maps iOS SDK sprawdzić, czy ścieżka jest w widocznym regionie
Odpowiedz
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");
}
}
ś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");
}
}
}
Dzięki za odpowiedź .. –
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.
Dzięki .. Wypróbuję to wkrótce –