我是任何编程的绝对初学者,但我正在尝试通过使用MapKit创建一个在地图上显示(我的!)路线的iOS应用程序来学习。沿途有注释和特定信息。
我有两个问题。
更好/更容易,尝试在注释之间使用MapKit方向,以便MapKit在路上显示路径(我想要)(我必须在每个注释之间获取路线,否则路线不会总是如此)我要展示的那个!)或以某种方式制作我的路线的叠加图像并使用它?
如果最好使用叠加层,我如何制作叠层并确保它位于正确的位置并放大和缩小?
我找到了很多关于如何添加叠加层的教程,但似乎找不到有关如何制作可在应用中使用的教程。
答案 0 :(得分:0)
在地图上设置图像是实现此功能的不良方法。对于路径绘图,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/
最终,您的目标将是以某种方式通过内置方向API或像Google Direction API这样的第三方面获得Lat-long中间位置。
枚举这些位置并在地图上绘制折线。如果您将来尝试使用Google地图,那么相同的逻辑和事情就会存在。只是Mehtods和Classes将被更改。
- (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地图
-(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;
}
}
}];
}