在地图上设置图像是实现此功能的不好方法。对于路径绘制,Apple 提供了 MKPolyline。这将解决您在缩放因子方面保持其位置的所有顾虑。
请查看以下折线图
iPhone: How to draw line between two points on MapKit?
或
http://pinkstone.co.uk/how-to-draw-an-mkpolyline-on-a-map-view/
最终,您的目标是通过 In-Built Direction API 或 Google Direction API 等第三方 API 以某种方式获得中间位置的 Lat-long。
枚举这些位置并在地图上绘制折线。如果您将来尝试使用 Google 地图,也会出现相同的逻辑和情况。只是方法和类将被更改。
- (void)drawLine {
// remove polyline if one exists
[self.mapView removeOverlay:self.polyline];
// create an array of coordinates from allPins
CLLocationCoordinate2D coordinates[self.allPins.count];
int i = 0;
for (Pin *currentPin in self.allPins) {
coordinates[i] = currentPin.coordinate;
i++;
}
// create a polyline with all cooridnates
MKPolyline *polyline = [MKPolyline polylineWithCoordinates:coordinates count:self.allPins.count];
[self.mapView addOverlay:polyline];
self.polyline = polyline;
// create an MKPolylineView and add it to the map view
self.lineView = [[MKPolylineView alloc]initWithPolyline:self.polyline];
self.lineView.strokeColor = [UIColor redColor];
self.lineView.lineWidth = 5;
}
编辑
如果您想使用 GOOGLE API 和 GOOGLE MAP 绘图
-(void)drawPathFrom:(CLLocation*)source toDestination:(CLLocation*)destination{
NSString *baseUrl = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/directions/json?origin=%f,%f&destination=%f,%f&sensor=true", source.coordinate.latitude, source.coordinate.longitude, destination.coordinate.latitude, destination.coordinate.longitude];
NSURL *url = [NSURL URLWithString:[baseUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"Url: %@", url);
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if(!connectionError){
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSArray *routes = [result objectForKey:@"routes"];
if([routes isKindOfClass:[NSArray class]] && routes.count>0){
NSDictionary *firstRoute = [routes objectAtIndex:0];
NSString *encodedPath = [firstRoute[@"overview_polyline"] objectForKey:@"points"];
GMSPolyline *polyPath = [GMSPolyline polylineWithPath:[GMSPath pathFromEncodedPath:encodedPath]];
polyPath.strokeColor = [UIColor blueColor];
polyPath.strokeWidth = 3.5f;
polyPath.map = _mapView;
}
}
}];
}