Konumlandırma MKMapView Aynı anda birden fazla ek açıklamaları göstermeye

oy
89

Benim MKMapView eklemek istediğiniz birkaç ek açıklamaları var (elinden n etrafında genelde 5'tir 0-n öğeler). Ben ince açıklamaları ekleyebilir, ama ekrandaki tek seferde ek açıklamaları sığdırmak için haritayı yeniden boyutlandırmak istiyorum, ve bunu nasıl emin değilim.

Ben baktığımız -regionThatFits:ama onunla ne yapacağını pek emin değilim. Ben bugüne kadar ne var göstermek için bazı kod göndeririz. Bunun genel olarak basit bir görev olması gerektiğini düşünüyorum ama şimdiye kadar MapKit ile biraz bunalmış hissediyorum.

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

location = newLocation.coordinate;
//One location is obtained.. just zoom to that location

MKCoordinateRegion region;
region.center = location;

//Set Zoom level using Span
MKCoordinateSpan span;
span.latitudeDelta = 0.015;
span.longitudeDelta = 0.015;
region.span = span;
// Set the region here... but I want this to be a dynamic size
// Obviously this should be set after I've added my annotations
[mapView setRegion:region animated:YES];

// Test data, using these as annotations for now
NSArray *arr = [NSArray arrayWithObjects:@one, @two, @three, @four, nil];
float ex = 0.01;
for (NSString *s in arr) {
    JBAnnotation *placemark = [[JBAnnotation alloc] initWithLat:(location.latitude + ex) lon:location.longitude];
    [mapView addAnnotation:placemark];
    ex = ex + 0.005;
}
    // What do I do here?
    [mapView setRegion:[mapView regionThatFits:region] animated:YES];
}

Ben konum güncellemesi alır almaz Bildirimi, bu tüm bu bunu yapmak için uygun bir yer ise bilmiyorum ... olur. Değilse, nerede daha iyi bir yer olurdu? -viewDidLoad?

Şimdiden teşekkürler.

Oluştur 26/08/2009 saat 18:35
kaynak kullanıcı
Diğer dillerde...                            


23 cevaplar

oy
133

Bağlantı (bir yere imi olan) Jim tarafından gönderildi şimdi öldü, ama ben kodu bulabildim. Bu yardımcı olur umarım.

- (void)zoomToFitMapAnnotations:(MKMapView *)mapView { 
    if ([mapView.annotations count] == 0) return; 

    CLLocationCoordinate2D topLeftCoord; 
    topLeftCoord.latitude = -90; 
    topLeftCoord.longitude = 180; 

    CLLocationCoordinate2D bottomRightCoord; 
    bottomRightCoord.latitude = 90; 
    bottomRightCoord.longitude = -180; 

    for(id<MKAnnotation> annotation in mapView.annotations) { 
        topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude); 
        topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude); 
        bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude); 
        bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude); 
    } 

    MKCoordinateRegion region; 
    region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.5; 
    region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5;      

    // Add a little extra space on the sides
    region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * 1.1;
    region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * 1.1; 

    region = [mapView regionThatFits:region]; 
    [mapView setRegion:region animated:YES]; 
}
Cevap 26/08/2011 saat 07:22
kaynak kullanıcı

oy
132

Neden bu kadar karmaşık?

MKCoordinateRegion coordinateRegionForCoordinates(CLLocationCoordinate2D *coords, NSUInteger coordCount) {
    MKMapRect r = MKMapRectNull;
    for (NSUInteger i=0; i < coordCount; ++i) {
        MKMapPoint p = MKMapPointForCoordinate(coords[i]);
        r = MKMapRectUnion(r, MKMapRectMake(p.x, p.y, 0, 0));
    }
    return MKCoordinateRegionForMapRect(r);
}
Cevap 08/08/2012 saat 11:41
kaynak kullanıcı

oy
43

Ben bir noktaya ek açıklama ve mevcut konumu dahil bir alana uzaklaştırmak için buna benzer (ya da) bir şey yapmış. Eğer ek açıklamalar döngü tarafından bu genişletebilecek.

temel adımlar şunlardır:

  • / Uzun enlem dk hesaplayın
  • maks enlem / boylam hesaplayın
  • Bu iki puan için CLLocation nesneleri oluşturma
  • nokta arasındaki mesafeyi hesaplamak
  • dereceye dönüştürülür noktaları ve mesafe arasındaki orta noktasını kullanarak bölge oluşturma
  • ayarlamak için MapView içine bölgeyi geçmek
  • MapView bölgesini ayarlamak için düzeltilmiş bölgeyi kullanın
    -(IBAction)zoomOut:(id)sender {

        CLLocationCoordinate2D southWest = _newLocation.coordinate;
        CLLocationCoordinate2D northEast = southWest;

        southWest.latitude = MIN(southWest.latitude, _annotation.coordinate.latitude);
        southWest.longitude = MIN(southWest.longitude, _annotation.coordinate.longitude);

        northEast.latitude = MAX(northEast.latitude, _annotation.coordinate.latitude);
        northEast.longitude = MAX(northEast.longitude, _annotation.coordinate.longitude);

        CLLocation *locSouthWest = [[CLLocation alloc] initWithLatitude:southWest.latitude longitude:southWest.longitude];
        CLLocation *locNorthEast = [[CLLocation alloc] initWithLatitude:northEast.latitude longitude:northEast.longitude];

        // This is a diag distance (if you wanted tighter you could do NE-NW or NE-SE)
        CLLocationDistance meters = [locSouthWest getDistanceFrom:locNorthEast];

        MKCoordinateRegion region;
        region.center.latitude = (southWest.latitude + northEast.latitude) / 2.0;
        region.center.longitude = (southWest.longitude + northEast.longitude) / 2.0;
        region.span.latitudeDelta = meters / 111319.5;
        region.span.longitudeDelta = 0.0;

        _savedRegion = [_mapView regionThatFits:region];
        [_mapView setRegion:_savedRegion animated:YES];

        [locSouthWest release];
        [locNorthEast release];
    }
Cevap 27/08/2009 saat 20:56
kaynak kullanıcı

oy
36

-iOS7 itibariyle kullanabileceğiniz showAnnotations: animasyonlu:

[mapView showAnnotations:annotations animated:YES];
Cevap 22/03/2014 saat 02:27
kaynak kullanıcı

oy
21

Ben farklı bir cevabım var. Ben yakınlaştırma-to-fit algoritmasını kendim uygulamak yapacağım, ama Apple düşündüm gerekir bu kadar çok iş olmadan istediğini yapmak için bir yol var. API doco hızla ı ihtiyaç vardı ne yapacağını MKPolygon kullanabilirsiniz gösterdi kullanma:

/* this simply adds a single pin and zooms in on it nicely */
- (void) zoomToAnnotation:(MapAnnotation*)annotation {
    MKCoordinateSpan span = {0.027, 0.027};
    MKCoordinateRegion region = {[annotation coordinate], span};
    [mapView setRegion:region animated:YES];
}

/* This returns a rectangle bounding all of the pins within the supplied
   array */
- (MKMapRect) getMapRectUsingAnnotations:(NSArray*)theAnnotations {
    MKMapPoint points`theAnnotations count`;

    for (int i = 0; i < [theAnnotations count]; i++) {
        MapAnnotation *annotation = [theAnnotations objectAtIndex:i];
        points[i] = MKMapPointForCoordinate(annotation.coordinate);
    }

    MKPolygon *poly = [MKPolygon polygonWithPoints:points count:[theAnnotations count]];

    return [poly boundingMapRect];
}

/* this adds the provided annotation to the mapview object, zooming 
   as appropriate */
- (void) addMapAnnotationToMapView:(MapAnnotation*)annotation {
    if ([annotations count] == 1) {
        // If there is only one annotation then zoom into it.
        [self zoomToAnnotation:annotation];
    } else {
        // If there are several, then the default behaviour is to show all of them
        //
        MKCoordinateRegion region = MKCoordinateRegionForMapRect([self getMapRectUsingAnnotations:annotations]);

        if (region.span.latitudeDelta < 0.027) {
            region.span.latitudeDelta = 0.027;
        }

        if (region.span.longitudeDelta < 0.027) {
            region.span.longitudeDelta = 0.027;
        }
        [mapView setRegion:region];
    }

    [mapView addAnnotation:annotation];
    [mapView selectAnnotation:annotation animated:YES];
}

Bu yardımcı olur umarım.

Cevap 04/10/2011 saat 02:50
kaynak kullanıcı

oy
14

Ayrıca bu şekilde yapabiliriz ..

// Position the map so that all overlays and annotations are visible on screen.
MKMapRect regionToDisplay = [self mapRectForAnnotations:annotationsToDisplay];
if (!MKMapRectIsNull(regionToDisplay)) myMapView.visibleMapRect = regionToDisplay;

- (MKMapRect) mapRectForAnnotations:(NSArray*)annotationsArray
{
    MKMapRect mapRect = MKMapRectNull;

    //annotations is an array with all the annotations I want to display on the map
    for (id<MKAnnotation> annotation in annotations) { 

        MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
        MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);

        if (MKMapRectIsNull(mapRect)) 
        {
            mapRect = pointRect;
        } else 
        {
            mapRect = MKMapRectUnion(mapRect, pointRect);
        }
    }

     return mapRect;
}
Cevap 12/09/2011 saat 05:59
kaynak kullanıcı

oy
12

Bilgi ve herkes önerilere dayalı Ben aşağıda ortaya attı. MapView içeren görünümü Denetleyicisi içinde gider bu :) katkıda bulunmak için bu tartışmada herkes için teşekkür ederiz.

- (void)zoomToFitMapAnnotations { 

if ([self.mapView.annotations count] == 0) return; 

int i = 0;
MKMapPoint points`self`.`mapView`.`annotations count`;

//build array of annotation points
for (id<MKAnnotation> annotation in [self.mapView annotations])
        points[i++] = MKMapPointForCoordinate(annotation.coordinate);

MKPolygon *poly = [MKPolygon polygonWithPoints:points count:i];

[self.mapView setRegion:MKCoordinateRegionForMapRect([poly boundingMapRect]) animated:YES]; 
}
Cevap 20/10/2011 saat 21:00
kaynak kullanıcı

oy
5

Benim durumumda, ben CLLocation nesnelerle başladım ve bunların her biri için ek açıklamaları yaratır.
Sadece iki ek açıklamalar yerleştirmek gerekir, bu yüzden noktaları dizi bina için basit bir yaklaşım var, ama kolayca CLLocations verilen bir dizi keyfi uzunlukta bir dizi oluşturmak için genişletilebilir.

İşte benim uygulaması (MKMapPoints oluşturarak gerektirmez) var:

//start with a couple of locations
CLLocation *storeLocation = store.address.location.clLocation;
CLLocation *userLocation = [LBLocationController sharedController].currentLocation;

//build an array of points however you want
CLLocationCoordinate2D points[2] = {storeLocation.coordinate, userLocation.coordinate};

//the magic part
MKPolygon *poly = [MKPolygon polygonWithCoordinates:points count:2];
[self.mapView setRegion:MKCoordinateRegionForMapRect([poly boundingMapRect])];
Cevap 25/01/2012 saat 21:11
kaynak kullanıcı

oy
4

Swift, bir çokgen ve aşağıdaki kullanılan bazı ekstra dolgu kullanma:

func zoomToFit() {
    var allLocations:[CLLocationCoordinate2D] = [
        CLLocationCoordinate2D(latitude: 32.768805, longitude: -117.167119),
        CLLocationCoordinate2D(latitude: 32.770480, longitude: -117.148385),
        CLLocationCoordinate2D(latitude: 32.869675, longitude: -117.212929)
    ]

    var poly:MKPolygon = MKPolygon(coordinates: &allLocations, count: allLocations.count)

    self.mapView.setVisibleMapRect(poly.boundingMapRect, edgePadding: UIEdgeInsetsMake(40.0, 40.0, 40.0, 40.0), animated: false)
}

Cevap 06/04/2015 saat 15:46
kaynak kullanıcı

oy
3

Yeni bir yöntem kullanabileceğiniz iOS 7'nin olarak 'MKMapView' de var

deklarasyon

SWIFT

func showAnnotations(_ annotations: [AnyObject]!,
            animated animated: Bool)

AMAÇ-Cı

- (void)showAnnotations:(NSArray *)annotations
               animated:(BOOL)animated

Parametreler

Haritanın görünür olmasını istediğiniz ek açıklamalar ek notların. Haritanın bölge değişikliği animasyon edilecek veya HAYIR harita animasyonlar olmadan hemen yeni bölgeyi görüntülemek istiyorsanız istiyorsanız EVET animasyonlu.

Tartışma

Bölge özelliğinde değer ve potansiyel olarak diğer özellikleri bu yöntemi güncellemeleri çağrılması yeni harita bölgesini yansıtacak şekilde.

Cevap 26/02/2015 saat 04:39
kaynak kullanıcı

oy
3

İşte SWIFT ile eşdeğer olduğunu (çalışma Onaylandı: Xcode6.1 SDK 8.2) Mustafa'nın Cevaplar için:

    func zoomToFitMapAnnotations() {
    if self.annotations.count == 0 {return}

    var topLeftCoordinate = CLLocationCoordinate2D(latitude: -90, longitude: 180)
    var bottomRightCoordinate = CLLocationCoordinate2D(latitude: 90, longitude: -180)

    var i = 1
    for object in self.annotations {
        if let annotation = object as? MKAnnotation {
            topLeftCoordinate.longitude = fmin(topLeftCoordinate.longitude, annotation.coordinate.longitude)
            topLeftCoordinate.latitude = fmin(topLeftCoordinate.latitude, annotation.coordinate.latitude)
            bottomRightCoordinate.longitude = fmin(bottomRightCoordinate.longitude, annotation.coordinate.longitude)
            bottomRightCoordinate.latitude = fmin(bottomRightCoordinate.latitude, annotation.coordinate.latitude)
        }
    }

    var center = CLLocationCoordinate2D(latitude: topLeftCoordinate.latitude - (topLeftCoordinate.latitude - bottomRightCoordinate.latitude) * 0.5, longitude: topLeftCoordinate.longitude - (topLeftCoordinate.longitude - bottomRightCoordinate.longitude) * 0.5)

    print("\ncenter:\(center.latitude) \(center.longitude)")
    // Add a little extra space on the sides
    var span = MKCoordinateSpanMake(fabs(topLeftCoordinate.latitude - bottomRightCoordinate.latitude) * 1.01, fabs(bottomRightCoordinate.longitude - topLeftCoordinate.longitude) * 1.01)
    print("\nspan:\(span.latitudeDelta) \(span.longitudeDelta)")

    var region = MKCoordinateRegion(center: center, span: span)


    region = self.regionThatFits(region)

    self.setRegion(region, animated: true)

}
Cevap 23/01/2015 saat 11:19
kaynak kullanıcı

oy
2

Tarafından mükemmel cevap dayanarak me2(şimdi Swift)

func coordinateRegionForCoordinates(coords: [CLLocationCoordinate2D]) -> MKCoordinateRegion {
    var rect: MKMapRect = MKMapRectNull
    for coord in coords {
        let point: MKMapPoint = MKMapPointForCoordinate(coord)
        rect = MKMapRectUnion(rect, MKMapRectMake(point.x, point.y, 0, 0))
    }
    return MKCoordinateRegionForMapRect(rect)
}
Cevap 18/05/2015 saat 14:05
kaynak kullanıcı

oy
2
- (void)zoomToFitMapAnnotations {

if ([self.mapview.annotations count] == 0) return;

int i = 0;
MKMapPoint points`self`.`mapview`.`annotations count`;

//build array of annotation points
for (id<MKAnnotation> annotation in [self.mapview annotations])
    points[i++] = MKMapPointForCoordinate(annotation.coordinate);

MKPolygon *poly = [MKPolygon polygonWithPoints:points count:i];

[self.mapview setRegion:MKCoordinateRegionForMapRect([poly boundingMapRect]) animated:YES];
}
Cevap 03/12/2014 saat 09:56
kaynak kullanıcı

oy
2

Olası bir çözüm mevcut konumu ve tüm ek açıklamalar arasındaki mesafeyi ölçmek ve uzak açıklama göre biraz daha büyük bir mesafe olan bir bölgesini yapmakta MKCoordinateRegionMakeWithDistance yöntemiyle olabilir.

Bu tabii gerçi eklenen yavaş daha ek açıklamaları tanınacak.

Cevap 26/08/2009 saat 21:13
kaynak kullanıcı

oy
1

Haritanın bu kullanmak ZATEN AÇIK tüm açıklamaları görüntülemek istiyorsanız, bu eski bir soru olduğunu biliyorum ama:

 mapView.showAnnotations(mapView.annotations, animated: true)
Cevap 23/12/2016 saat 20:35
kaynak kullanıcı

oy
1

fıkra mustufa en cound kod parçalarında eklemek için 1 konum-işlemek için eğer biraz eklendi. Bunun için pkclSoft en zoomToAnnotation fonksiyonu kullanılır:

if ([mapView.annotations count] == 1){
    MKCoordinateSpan span = {0.027, 0.027};
    region.span = span;
    CLLocationCoordinate2D singleCoordinate = [[mapView.annotations objectAtIndex:0] coordinate];
    region.center.latitude = singleCoordinate.latitude;
    region.center.longitude = singleCoordinate.longitude;
}
else
{
    // mustufa's code
}
Cevap 31/01/2012 saat 05:31
kaynak kullanıcı

oy
0

Bir hızlı 5 sürümü:

   func regionFor(coordinates coords: [CLLocationCoordinate2D]) -> MKCoordinateRegion {
        var r = MKMapRect.null

        for i in 0 ..< coords.count {
            let p = MKMapPoint(coords[i])

            r = r.union(MKMapRect(x: p.x, y: p.y, width: 0, height: 0))
        }

        return MKCoordinateRegion(r)
    }
Cevap 28/08/2019 saat 12:40
kaynak kullanıcı

oy
0

Bu uzantıyı düşünün:

extension MKCoordinateRegion {
    init(locations: [CLLocationCoordinate2D], marginMultiplier: Double = 1.1) {
        let mapRect = locations.reduce(MKMapRect(), {
            let point = MKMapPointForCoordinate($1)
            let rect = MKMapRect(origin: point, size: MKMapSize(width: 0.0, height: 0.0))
            return MKMapRectUnion($0, rect)
        })

        var coordinateRegion = MKCoordinateRegionForMapRect(mapRect)
        coordinateRegion.span.latitudeDelta *= marginMultiplier
        coordinateRegion.span.longitudeDelta *= marginMultiplier
        self = coordinateRegion
    }
}
Cevap 30/09/2017 saat 13:21
kaynak kullanıcı

oy
0

Bu size yardımcı olur umarım bu kod, geçerli konumu ile tüm pinleri gösterir, benim için çalışıyor

func setCenterForMap() {
    var mapRect: MKMapRect = MKMapRectNull
    for loc in mapView.annotations {
        let point: MKMapPoint = MKMapPointForCoordinate(loc.coordinate)
        print( "location is : \(loc.coordinate)");
        mapRect = MKMapRectUnion(mapRect, MKMapRectMake(point.x,point.y,0,0))
    }
    if (locationManager.location != nil) {
        let point: MKMapPoint = MKMapPointForCoordinate(locationManager.location!.coordinate)
        print( "Cur location is : \(locationManager.location!.coordinate)");
        mapRect = MKMapRectUnion(mapRect, MKMapRectMake(point.x,point.y,0,0))
    }

    mapView.setVisibleMapRect(mapRect, edgePadding: UIEdgeInsetsMake(40.0, 40.0, 40.0, 40.0), animated: true)

}
Cevap 08/04/2016 saat 08:35
kaynak kullanıcı

oy
0

Bir cevap yorum yapamam, ben (ben burada Bulunan en zarif yaklaşım olduğunu düşündüm beri) @ me2 'ın cevabı içine kolaylık rolümü eklemek istiyorum.

benim kişisel proje için ben sadece bir ver ortak operasyon için "görünür alan" işlevleri kapsülleyen MKMapView sınıfı bir kategori ekledi: MKMapView örneğindeki tüm şu anda yüklenmiş ek açıklamaları görmek mümkün ayarını. Sonuç şuydu:

.h dosyası

#import <MapKit/MapKit.h>

@interface MKMapView (Extensions)

-(void)ij_setVisibleRectToFitAllLoadedAnnotationsAnimated:(BOOL)animated;
-(void)ij_setVisibleRectToFitAnnotations:(NSArray *)annotations animated:(BOOL)animated;


@end

.m dosyası

#import "MKMapView+Extensions.h"

@implementation MKMapView (Extensions)

/**
 *  Changes the currently visible portion of the map to a region that best fits all the currently loadded annotations on the map, and it optionally animates the change.
 *
 *  @param animated is the change should be perfomed with an animation.
 */
-(void)ij_setVisibleRectToFitAllLoadedAnnotationsAnimated:(BOOL)animated
{
    MKMapView * mapView = self;

    NSArray * annotations = mapView.annotations;

    [self ij_setVisibleRectToFitAnnotations:annotations animated:animated];

}


/**
 *  Changes the currently visible portion of the map to a region that best fits the provided annotations array, and it optionally animates the change.
    All elements from the array must conform to the <MKAnnotation> protocol in order to fetch the coordinates to compute the visible region of the map.
 *
 *  @param annotations an array of elements conforming to the <MKAnnotation> protocol, holding the locations for which the visible portion of the map will be set.
 *  @param animated    wether or not the change should be perfomed with an animation.
 */
-(void)ij_setVisibleRectToFitAnnotations:(NSArray *)annotations animated:(BOOL)animated
{
    MKMapView * mapView = self;

    MKMapRect r = MKMapRectNull;
    for (id<MKAnnotation> a in annotations) {
        ZAssert([a conformsToProtocol:@protocol(MKAnnotation)], @"ERROR: All elements of the array MUST conform to the MKAnnotation protocol. Element (%@) did not fulfill this requirement", a);
        MKMapPoint p = MKMapPointForCoordinate(a.coordinate);
        //MKMapRectUnion performs the union between 2 rects, returning a bigger rect containing both (or just one if the other is null). here we do it for rects without a size (points)
        r = MKMapRectUnion(r, MKMapRectMake(p.x, p.y, 0, 0));
    }

    [mapView setVisibleMapRect:r animated:animated];

}

@end

Gördüğünüz gibi, şimdiye kadar 2 yöntemleri ekledik: birini MKMapView örneğindeki tüm şu anda yüklenmiş açıklamaları uyan bir ve nesnelerin herhangi diziye ayarlamak için başka yönteme haritanın görünür bölgesini ayarlamak için. Yani MapView en görünür bölge kodu daha sonra kadar basit olacağını ayarlamak için:

   //the mapView instance  
    [self.mapView ij_setVisibleRectToFitAllLoadedAnnotationsAnimated:animated]; 

Umarım o) = olur

Cevap 10/06/2014 saat 14:16
kaynak kullanıcı

oy
0

MKMapView bazı kenar boşluklarını ekleyip kullanıcı konumu ek açıklama atlamak için me2 yanıta dayalı bir kategori yazdım:

@interface MKMapView (ZoomToFitAnnotations)
- (void)zoomToFitAnnotations:(BOOL)animated;
@end

@implementation MKMapView (ZoomToFitAnnotations)
- (void)zoomToFitAnnotations:(BOOL)animated {
    if (self.annotations.count == 0)
        return;

    MKMapRect rect = MKMapRectNull;
    for (id<MKAnnotation> annotation in self.annotations) {
        if ([annotation isKindOfClass:[MKUserLocation class]] == false) {
            MKMapPoint point = MKMapPointForCoordinate(annotation.coordinate);
            rect = MKMapRectUnion(rect, MKMapRectMake(point.x, point.y, 0, 0));
        }
    }

    MKCoordinateRegion region = MKCoordinateRegionForMapRect(rect);
    region.span.longitudeDelta *= 2; // Margin
    region.span.latitudeDelta *= 2; // Margin
    [self setRegion:region animated:animated];
}
@end
Cevap 15/04/2014 saat 06:39
kaynak kullanıcı

oy
0
CLLocationCoordinate2D min = CLLocationCoordinate2DMake(99999.0, 99999.0);
CLLocationCoordinate2D max = CLLocationCoordinate2DMake(-99999.0, -99999.0);

// find max/min....

// zoom to cover area
// TODO: Maybe better using a MKPolygon which can calculate its own fitting region.
CLLocationCoordinate2D center = CLLocationCoordinate2DMake((max.latitude + min.latitude) / 2.0, (max.longitude + min.longitude) / 2.0);
MKCoordinateSpan span = MKCoordinateSpanMake(max.latitude - min.latitude, max.longitude - min.longitude);
MKCoordinateRegion region = MKCoordinateRegionMake(center, span);

[_mapView setRegion:[_mapView regionThatFits:region] animated:YES];
Cevap 27/07/2012 saat 13:08
kaynak kullanıcı

oy
0

Ben, bu ben (pkclSoft cevabı dışına göre) Mono araya şeydir bu, en azından ilgili umut:

void ZoomMap (MKMapView map)
{
    var annotations = map.Annotations;

    if (annotations == null || annotations.Length == 0) 
        return;

    var points = annotations.OfType<MapAnnotation> ()
                            .Select (s => MKMapPoint.FromCoordinate (s.Coordinate))
                            .ToArray ();            

    map.SetVisibleMapRect(MKPolygon.FromPoints (points).BoundingMapRect, true); 
}
Cevap 06/03/2012 saat 07:13
kaynak kullanıcı

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