2011-03-29 14 views
9

मैं आईओएस 4.0 में एमकेमैपव्यू पर एमकेपोलीगॉन प्लॉट करने की कोशिश कर रहा हूं। मेरे पास एक एनएसएआरएआर है जिसमें कस्टम ऑब्जेक्ट्स हैं जिनमें अक्षांश/देशांतर के गुण शामिल हैं।आईफोन एमकेमैपव्यू - एमके पॉलीगॉन मुद्दे

  1. मैं
  2. यह ट्रिगर किया जाएगा बदल जाएगी MapView को MKPolygon
  3. Ddd एक उपरिशायी बनाने की जरूरत:

    - (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; 
    } 
    

    तरह से मैं यह समझता हूँ कि यह है: मैं नीचे एक कोड नमूना है MKPolygonView का निर्माण।

मेरा प्रश्न यह है कि मैं एनएसएआरएआरई (समन्वय डेटा) में अपनी कस्टम ऑब्जेक्ट कैसे ले सकता हूं और इन ऑब्जेक्ट को CLLocationCoordinate2d में परिवर्तित कर सकता हूं ताकि पॉलीगॉन व्याख्या और प्रस्तुत कर सके? मुझे यकीन नहीं है कि CLLocationCoordinate2d भी एक सरणी है? क्या कोई इस पर कुछ स्पष्टता डाल सकता है।

उत्तर

17

पॉलीगॉन विथकॉर्डिनेट्स विधि CLLocationCoordinate2D structs की सी सरणी चाहता है। आप मेमोरी को रिलीज़ करने के लिए सरणी (और free) के लिए स्मृति आवंटित करने के लिए malloc का उपयोग कर सकते हैं। अपने एनएसएआरएआरई के माध्यम से लूप करें और इसे प्रत्येक तत्व को स्ट्रक्चर सरणी में सेट करें।

उदाहरण के लिए:

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 विधि इस तरह दिखना चाहिए:,

- (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

आईओएस 7.0 के लिए और बाद में हम MKPolygonView के बजाय MKPolygonRenderer का उपयोग करना चाहिए

- (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 ; // आपकी सरणी निर्देशांक

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]; 
} 

युक्त // आपकी "coordinatesArray" अक्षांश और देशांतर चाबियों का एक से अधिक मान के साथ शब्दकोश युक्त एक सरणी है। // उम्मीद है कि यह आपकी मदद करता है।

संबंधित मुद्दे