2015-05-05 11 views

risposta

8

Recupera i limiti del viewport con GMSVisibleRegion e crea un GMSCoordinateBounds con esso. Chiama il numero containsCoordinate, passando nella posizione del marcatore. Dovrebbe restituire true se il marker si trova all'interno della finestra e false se non lo è.

+0

Che ha funzionato come un fascino, grazie! –

+1

Farò un esempio di codice in una risposta ... –

12

Un esempio di codice in base alla risposta utile di Andy:

- (void)snapToMarkerIfItIsOutsideViewport:(GMSMarker *)m{ 
    GMSVisibleRegion region = _mapView.projection.visibleRegion; 
    GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithRegion:region]; 
    if (![bounds containsCoordinate:m.position]){ 
     GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:m.position.latitude 
               longitude:m.position.longitude 
                zoom:_mapView.camera.zoom]; 
     [self.mapView animateToCameraPosition: camera]; 
    } 
} 
+0

Grazie mille! funziona perfettamente! mi fa risparmiare un sacco di tempo – youssman

0

Spero che questo codice può aiutare a cacciatori di codice.

NSMutableArray *mutArrMarkers; //Have all markers added on Map 
. 
. 
. 
. 

NSMutableArray *mutArrMarkersInPath = [NSMutableArray array]; 
[mutArrMarkers enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
    GMSMarker *marker = obj; 
    if(GMSGeometryContainsLocation(currentCoordinates, pathToCheck, YES)){ 
     [mutArrMarkersInPath addObject:marker]; 
    } 
}]; 
0

Ho scritto sul metodo per trovare GMSMarker in particolare frame. Imposta la cornice del rettangolo (x, y, maxX, maxY). È possibile impostare qualsiasi frame dallo schermo che indica che il marker trova è in quel frame oppure no ..

- (BOOL)isGoogleMapMarkerVisible:(GMSMarker*)marker { 

    //Marker point 
    CGPoint markerpoint = [self.mapview.projection pointForCoordinate:marker.position]; 

    //Maximum visible region from x and y axis 
    float x = 0.0; 
    float y = o.o; 
    float maxX = self.mapview.frame.size.width; 
    float maxY = self.mapview.frame.size.height; 

    //If marker point is on visible region return true else return false 
    if (markerpoint.x > x && markerpoint.y > y && markerpoint.x < maxX && markerpoint.y < maxY) { 
     return YES; 
    } 
    else { 
      return NO; 
    } 
} 
1

La versione 4 rapida della risposta. Restituzione di un booleano se l'indicatore all'interno della regione dello schermo o no

func isMarkerWithinScreen(marker: GMSMarker) -> Bool { 
    let region = self.mapView.projection.visibleRegion() 
    let bounds = GMSCoordinateBounds(region: region) 
    return bounds.contains(marker.position) 
} 
Problemi correlati