ios - Does anyone have any examples on how to create a path using MKOverlayPathView? -


i've been looking @ apple's ios class reference documentation, , unfortunately none wiser. have downloaded sample code kmlviewer they've overcomplicated it... want know how generate path , add mkmapview. documentation talks of using cgpathref, doesn't explain how.

could or point me in right direction please? thanks!

here's how generate path , add overlay mkmapview. i'm going use mkpolylineview, subclass of mkoverlaypathview , shields having refer cgpath since instead create mkpolyline (containing data of path) , use create mkpolylineview (the visual representation of data on map).

the mkpolyline has created c array of points (mkmappoint), or c array of coordinates (cllocationcoordinate2d). it's shame mapkit doesn't use more advanced data structures such nsarray, it! i'm going assume have nsarray or nsmutablearray of cllocation objects demonstrate how convert c array of data suitable mkpolyline. array called locations , how fill determined app - e.g. filled in processing touch locations user, or filled data downloaded web service etc.

in view controller in charge of mkmapview:

int numpoints = [locations count]; if (numpoints > 1) {     cllocationcoordinate2d* coords = malloc(numpoints * sizeof(cllocationcoordinate2d));     (int = 0; < numpoints; i++)     {          cllocation* current = [locations objectatindex:i];          coords[i] = current.coordinate;     }      self.polyline = [mkpolyline polylinewithcoordinates:coords count:numpoints];     free(coords);      [mapview addoverlay:self.polyline];     [mapview setneedsdisplay]; } 

note self.polyline declared in .h as:

@property (nonatomic, retain) mkpolyline* polyline; 

this view controller should implement mkmapviewdelegate method:

- (mkoverlayview*)mapview:(mkmapview*)themapview viewforoverlay:(id <mkoverlay>)overlay {     mkpolylineview* lineview = [[[mkpolylineview alloc] initwithpolyline:self.polyline] autorelease];     lineview.fillcolor = [uicolor whitecolor];     lineview.strokecolor = [uicolor whitecolor];     lineview.linewidth = 4;     return lineview; } 

you can play fillcolor, strokecolor , linewidth properties ensure appropriate app. i've gone simple, moderately wide plain white line here.

if want remove path map, e.g. update new coordinates, do:

[mapview removeoverlay:self.polyline]; self.polyline = nil; 

and repeat above process create new mkpolyline , add map.

although on first glance mapkit can bit scary , complex, can easy things illustrated in example. scary bit - non-c programmers @ least - use of malloc create buffer, copy cllocationcoordinates using array syntax, , freeing memory buffer afterwards.


Comments

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -