2011-03-29 15 views
9

iOS 4.0'da bir MKMapView üzerinde bir MKPolygon çizmeye çalışıyorum. Enlem/boylam için özellikler içeren özel nesneler içeren bir NSArray'ım var.iPhone MKMapView - MKPolygon Sorunları

  1. Ben
  2. Bu tetikleyecek dönecek MapView için MKPolygon
  3. Ddd bir bindirme oluşturmak gerekir:

    - (void)viewDidLoad { 
        [super viewDidLoad]; 
        dataController = [[DataController alloc] initWithMockData]; 
        coordinateData = [dataController getCordData]; 
    
        CLLocationCoordinate2D *coords = NULL; 
        NSUInteger coordsLen = 0; 
    
        /* How do we actually define an array of CLLocationCoordinate2d? */ 
    
        MKPolygon *polygon = [MKPolygon polygonWithCoordinates:coords count:coordsLen]; 
        [mapView addOverlay: polygon]; 
    
    } 
    
    - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
    { 
        MKPolygonView *polygonView = [[MKPolygonView alloc] initWithPolygon: routePolygon]; 
        NSLog(@"Attempting to add Overlay View"); 
        return polygonView; 
    } 
    

    Anladığım kadarıyla şudur: Ben aşağıda bir kod örneği var MKPolygonView oluşturulması.

Sorum i NSArray (coordinateData) içerdiği benim özel nesne alıp Poligon yorumlayıp işleyebilen böylece CLLocationCoordinate2d bir diziye bu nesneyi dönüştürebilirim nasıl? CLLocationCoordinate2d'nin nasıl bir dizi olduğundan emin değilim? Birisi buna biraz açıklık getirebilir.

cevap

17

ÇokgenWithCoordinates yöntemi bir CLLocationCoordinate2D yapısı dizisi ister. Dizi için bellek ayırmak için malloc kullanabilirsiniz (ve belleği serbest bırakmak için free). NSArray'inizden geçiş yapın ve her öğeyi struct dizisinde ayarlayın.

coordsLen = [coordinateData count]; 
CLLocationCoordinate2D *coords = malloc(sizeof(CLLocationCoordinate2D) * coordsLen); 
for (int i=0; i < coordsLen; i++) 
{ 
    YourCustomObj *coordObj = (YourCustomObj *)[coordinateData objectAtIndex:i]; 
    coords[i] = CLLocationCoordinate2DMake(coordObj.latitude, coordObj.longitude); 
} 
MKPolygon *polygon = [MKPolygon polygonWithCoordinates:coords count:coordsLen]; 
free(coords); 
[mapView addOverlay:polygon]; 

viewForOverlay yöntemi şu şekilde görünmelidir:,

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{ 
    MKPolygonView *polygonView = [[[MKPolygonView alloc] initWithPolygon:overlay] autorelease]; 
    polygonView.lineWidth = 1.0; 
    polygonView.strokeColor = [UIColor redColor]; 
    polygonView.fillColor = [UIColor greenColor]; 
    return polygonView; 
} 
1
iOS 7.0 için

ve daha sonra yerine MKPolygonView ait MKPolygonRenderer kullanmalıdır

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay 
{ 
    MKPolygonRenderer * polygonView = [[MKPolygonRenderer alloc] initWithPolygon:overlay]; 
    polygonView.fillColor = [UIColor greenColor]; 
    polygonView.strokeColor = [UIColor redColor] ; 
    polygonView.lineWidth = 1.0; 
    return polygonView; 
} 
0

coordinatesArray Örneğin

; // koordinatları

for (int i=0; i <[coordinatesArray count]; i++) 
{ 
    float latitude = [coordinatesArray[i][@"latitude"] floatValue]; 
    float longitude = [coordinatesArray[i][@"longitude"] floatValue]; 
    MKPolygon *polygon; 
    CLLocationCoordinate2D coordinates[[coordinatesArray count]]; 
    coordinates[i] = CLLocationCoordinate2DMake(latitude , longitude); 
    polygon = [MKPolygon polygonWithCoordinates:coordinates count:[coordinatesArray count]]; 
    [self.mapView addOverlay:polygon]; 
} 

içeren Kişisel dizi // Sizin "coordinatesArray" enlem ve boylam tuşlarının birden fazla değer içeren sözlüğü içeren bir dizidir. // Umarım bu size yardımcı olur.