大概的需求,效果就是這樣就缆!
好了帖渠,廢話不多說,地圖如何構(gòu)建大家都會了吧竭宰,這里就不多說了阿弃。折線明顯是個數(shù)組(經(jīng)緯度)。所以我們需要初始化一個存儲經(jīng)緯度的數(shù)組羞延。
@property (nonatomic, strong) NSMutableArray *dataArray;//后臺給的經(jīng)緯度是倒序的
@property (nonatomic, strong) NSArray *daoxuArray;//用一個數(shù)組把經(jīng)緯度數(shù)組正序
NSArray *arr = result[@"data"][@"items"]; //一個帶有經(jīng)緯度的數(shù)組
self.dataArray = [NSMutableArray array];
for (NSDictionary *dic in arr ) {
COSOverlayModel *model = [COSOverlayModel modelWithDictionary:dic];
[self.dataArray addObject:model];
}
if (self.dataArray.count != 0) {
self.daoxuArray = [[self.dataArray reverseObjectEnumerator]allObjects];
//繪制路線
CLLocationCoordinate2D paths[self.daoxuArray.count];//一個結(jié)構(gòu)體初始化個數(shù)
for (NSInteger i = 0; i < self.daoxuArray.count; i++) {
COSOverlayModel *model = self.daoxuArray[i];
CLLocationDegrees latitude = [model.latitude doubleValue];
CLLocationDegrees longitude = [model.longitude doubleValue];
//表示經(jīng)緯度的結(jié)構(gòu)體 - 經(jīng)度 緯度
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude, longitude);
BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
annotation.coordinate = coordinate;
paths[i].latitude = [model.latitude doubleValue];
paths[i].longitude = [model.longitude doubleValue];
if (i== self.dataArray.count - 1) {//最終以最后一個緯度為地圖中心
self.mapView.centerCoordinate = coordinate;//更新當(dāng)前坐標點最后一個位置到地圖中間(即終點)
}
[self.mapView addAnnotation:annotation];
}
// NSLog(@"%f--%f", coors[idx].latitude, coors[idx].longitude);
// NSLog(@"%f--%f", [mo.latitude doubleValue], [mo.longitude doubleValue]);
weakself.polyline = [BMKPolyline polylineWithCoordinates:paths count:self.daoxuArray.count];//初始化折線
[weakself.mapView addOverlay:weakself.polyline];//將折線加入地圖中
// 兩個代理方法
//設(shè)置折線圖
- (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id <BMKOverlay>)overlay{
if ([overlay isKindOfClass:[BMKPolyline class]]){
BMKPolylineView* polylineView = [[BMKPolylineView alloc] initWithOverlay:overlay];
polylineView.strokeColor = [UIColor blueColor];
polylineView.lineWidth = 2.0;
return polylineView;
}
return nil;
}
//自定義大頭針
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation {
if ([annotation isKindOfClass:[BMKPointAnnotation class]])
{
static NSString *reuseIndetifier = @"annotationReuseIndetifier";
BMKAnnotationView *annotationView = (BMKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseIndetifier];
if (annotationView == nil)
{
annotationView = [[BMKAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:reuseIndetifier];
}
//這之前邏輯沒捋清楚渣淳,導(dǎo)致廢了1個小時的時間
for (int i = 0; i < self.daoxuArray.count; i++) {
COSOverlayModel *model = self.daoxuArray[i];
CGFloat lat = [model.latitude doubleValue];
CGFloat lng = [model.longitude doubleValue];
if (annotation.coordinate.latitude == lat && annotation.coordinate.longitude == lng) {//判斷經(jīng)緯度是否于終點經(jīng)緯度對應(yīng),然再做處理
if (i == self.dataArray.count - 1) {
annotationView.image = [UIImage imageNamed:@"Image_end"];//結(jié)束點
}
if (i == 0) {
annotationView.image = [UIImage imageNamed:@"Image_start"];//開始點
}
}
}
return annotationView;
}
return nil;
}
好了簡單的百度地圖繪制路線完成了伴箩,起始點的大頭針很好設(shè)置入愧,終點的大頭針思路沒捋好導(dǎo)致浪費了很長時間,自己記錄一下嗤谚,借此大家也能少踩坑棺蛛。菜雞一個,代碼寫的很粗糙巩步,希望大家提意見旁赊。有不明白的可以問我。