Zoom dans un MKMapView programme

voix
23

J'utilise un MKMapViewintérieur d' une application iPhone. Lorsque je clique sur un bouton , le niveau de zoom doit augmenter. Ceci est ma première approche:

MKCoordinateRegion zoomIn = mapView.region;
zoomIn.span.latitudeDelta *= 0.5;
[mapView setRegion:zoomIn animated:YES];

Cependant, ce code n'a eu aucun effet, puisque je ne l'ai pas mettre à jour la valeur longitudeDelta. J'ai donc ajouté cette ligne:

zoomIn.span.longitudeDelta *= 0.5;

Maintenant , cela fonctionne, mais seulement parfois. Le latitudeDeltaet longitudeDeltane changent pas de la même manière, je veux dire, leurs valeurs ne sont pas proportionnelles. Aucune idée sur la façon de résoudre ça?

Créé 23/06/2009 à 11:37
source utilisateur
Dans d'autres langues...                            


9 réponses

voix
27

Je ne sais pas si cela est la bonne façon de le faire, mais j'utilise ceci pour zoomer et dézoomer.

        case 0: { // Zoom In
        //NSLog(@"Zoom - IN");
        MKCoordinateRegion region;
        //Set Zoom level using Span
        MKCoordinateSpan span;  
        region.center=mapView.region.center;

        span.latitudeDelta=mapView.region.span.latitudeDelta /2.0002;
        span.longitudeDelta=mapView.region.span.longitudeDelta /2.0002;
        region.span=span;
        [mapView setRegion:region animated:TRUE];
    }
        break;

    // Zoom Out 
    case 2: {
        //NSLog(@"Zoom - OUT");
        MKCoordinateRegion region;
        //Set Zoom level using Span
        MKCoordinateSpan span;  
        region.center=mapView.region.center;
        span.latitudeDelta=mapView.region.span.latitudeDelta *2;
        span.longitudeDelta=mapView.region.span.longitudeDelta *2;
        region.span=span;
        [mapView setRegion:region animated:TRUE];
    }
Créé 29/07/2009 à 14:58
source utilisateur

voix
21

Il suffit de nettoyer la réponse de dkdarel

// delta is the zoom factor
// 2 will zoom out x2
// .5 will zoom in by x2
- (void)zoomMap:(MKMapView*)mapView byDelta:(float) delta {

    MKCoordinateRegion region = mapView.region;
    MKCoordinateSpan span = mapView.region.span;
    span.latitudeDelta*=delta;
    span.longitudeDelta*=delta;
    region.span=span;
    [mapView setRegion:region animated:YES];

}

Code rapide:

func zoomMap(byFactor delta: Double) {
    var region: MKCoordinateRegion = self.mapView.region
    var span: MKCoordinateSpan = mapView.region.span
    span.latitudeDelta *= delta
    span.longitudeDelta *= delta
    region.span = span
    mapView.setRegion(region, animated: true)
}
Créé 21/11/2013 à 19:43
source utilisateur

voix
21

Voici une solution plus facile:

MKUserLocation *userLocation = mapView.userLocation;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (
      userLocation.location.coordinate, 50, 50);
[mapView setRegion:region animated:NO];
Créé 28/11/2012 à 18:40
source utilisateur

voix
2

Juste traduit la solution de dkardel à rapide:

@IBAction func zoomOutButtonClicked(sender: UIButton) {
    let span = MKCoordinateSpan(latitudeDelta: mapView.region.span.latitudeDelta*2, longitudeDelta: mapView.region.span.longitudeDelta*2)
    let region = MKCoordinateRegion(center: mapView.region.center, span: span)

    mapView.setRegion(region, animated: true)
}

@IBAction func zoomInButtonClicked(sender: UIButton) {
    let span = MKCoordinateSpan(latitudeDelta: mapView.region.span.latitudeDelta/2, longitudeDelta: mapView.region.span.longitudeDelta/2)
    let region = MKCoordinateRegion(center: mapView.region.center, span: span)

    mapView.setRegion(region, animated: true)
}
Créé 31/03/2015 à 08:43
source utilisateur

voix
2

Voici ma façon de déplacer la carte au point d'annotation et de zoom assez proche. Vous pouvez facilement changer le zoom en ligneCGFloat newLatDelta = 0.06f;

- (void)moveMapToAnnotation:(MKPointAnnotation*)annotation
{
    CGFloat fractionLatLon = map.region.span.latitudeDelta / map.region.span.longitudeDelta;
    CGFloat newLatDelta = 0.06f;
    CGFloat newLonDelta = newLatDelta * fractionLatLon;
    MKCoordinateRegion region = MKCoordinateRegionMake(annotation.coordinate, MKCoordinateSpanMake(newLatDelta, newLonDelta));
    [map setRegion:region animated:YES];
}
Créé 01/04/2014 à 11:57
source utilisateur

voix
1

mapView.setRegion méthode a un problème lorsque votre carte est tournée

Vous pouvez zoomer carte via la mapView.camera.altitudepropriété, mais il est pas animé:

mapView.camera.altitude *= 1.05

Vous pouvez créer un nouvel objet caméra et mettez-le avec animation:

let currentCamera = mapView.camera
let newCamera: MKMapCamera
if #available(iOS 9.0, *) {
    newCamera = MKMapCamera(lookingAtCenter: currentCamera.centerCoordinate, fromDistance: currentCamera.altitude * 2, pitch: currentCamera.pitch, heading: currentCamera.heading)
} else {
    newCamera = MKMapCamera()
    newCamera.centerCoordinate = currentCamera.centerCoordinate
    newCamera.heading = currentCamera.heading
    newCamera.altitude = currentCamera.altitude * 2
    newCamera.pitch = currentCamera.pitch
}

mapView.setCamera(newCamera, animated: true)
Créé 17/05/2017 à 12:33
source utilisateur

voix
1
- (IBAction)btnZoomInPressed
{
    MKCoordinateRegion region;
    MKCoordinateSpan span;
    region.center.latitude = lati;
    region.center.longitude = longi;
    span.latitudeDelta=viewMapSingleVenue.region.span.latitudeDelta /2.0002;
    span.longitudeDelta=viewMapSingleVenue.region.span.longitudeDelta /2.0002;
    region.span=span;
    [viewMapSingleVenue setRegion:region animated:TRUE];
}

- (IBAction)btnZoomOutPressed
{
    MKCoordinateRegion region;
    MKCoordinateSpan span;
    region.center.latitude = lati;
    region.center.longitude = longi;
    span.latitudeDelta=viewMapSingleVenue.region.span.latitudeDelta *2;
    span.longitudeDelta=viewMapSingleVenue.region.span.longitudeDelta *2;
    if(span.latitudeDelta < 200)
    {
    region.span=span;
    [viewMapSingleVenue setRegion:region animated:TRUE];
    }
}
Créé 20/02/2015 à 13:56
source utilisateur

voix
1

J'utilise un code similaire à la vôtre et il semble fonctionner. Ce qui peut se produire est que votre delta ne change pas assez pour que le niveau de zoom pour augmenter d'un niveau de zoom google à l'autre. Cela dépendra aussi de l'état initial de la carte, ce qui pourrait expliquer pourquoi il est intermittent - alors comment définissez-vous la carte et le niveau de zoom vers le haut pour commencer, avant que l'utilisateur appuie sur le bouton de zoom?

Vous pouvez aussi regarder dans la méthode regionThatFits qui ajustera la région que vous fournissez (le nom est de la mémoire que je n'ai pas les documents à portée de main de la pomme).

Créé 23/06/2009 à 13:16
source utilisateur

voix
0

Dans Swift 4.2

let location = mapView.userLocation
let region = MKCoordinateRegion(center: location.coordinate, span: MKCoordinateSpan(latitudeDelta: 50, longitudeDelta: 50))
mapView.setRegion(region, animated: true)
Créé 22/03/2019 à 12:02
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more