美文网首页iOS学习开发iOS 开发技巧
iOS 百度地图根据已知的经纬度画折线(包括大头针的自定义)

iOS 百度地图根据已知的经纬度画折线(包括大头针的自定义)

作者: 其实你懂De | 来源:发表于2019-01-07 15:05 被阅读2次
WechatIMG1483.jpeg

大概的需求,效果就是这样!
好了,废话不多说,地图如何构建大家都会了吧,这里就不多说了。折线明显是个数组(经纬度)。所以我们需要初始化一个存储经纬度的数组。


@property (nonatomic, strong) NSMutableArray *dataArray;//后台给的经纬度是倒序的
@property (nonatomic, strong) NSArray *daoxuArray;//用一个数组把经纬度数组正序
           NSArray *arr = result[@"data"][@"items"];    //一个带有经纬度的数组            
           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];//一个结构体初始化个数
                            for (NSInteger i = 0; i < self.daoxuArray.count; i++) {
                                COSOverlayModel *model = self.daoxuArray[i];
                                CLLocationDegrees latitude = [model.latitude doubleValue];
                                CLLocationDegrees longitude = [model.longitude doubleValue];
                                //表示经纬度的结构体 - 经度 纬度
                                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;//更新当前坐标点最后一个位置到地图中间(即终点)
                                }
                                [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];//将折线加入地图中
// 两个代理方法
//设置折线图
- (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];
        }
       
        
       //这之前逻辑没捋清楚,导致废了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) {//判断经纬度是否一一对应,然再做处理
                if (i == self.dataArray.count - 1) {
                    annotationView.image = [UIImage imageNamed:@"Image_end"];//结束点
                    
                }
                if (i == 0) {
                    annotationView.image = [UIImage imageNamed:@"Image_start"];//开始点
                }
                
            }
            
        }
        
       
        
        return annotationView;
    }
    

    return nil;
}

好了简单的百度地图绘制路线完成了,起始点的大头针很好设置,终点的大头针思路没捋好导致浪费了很长时间,自己记录一下,借此大家也能少踩坑。菜鸡一个,代码写的很粗糙,希望大家提意见。有不明白的可以问我。

相关文章

  • iOS 百度地图根据已知的经纬度画折线(包括大头针的自定义)

    大概的需求,效果就是这样!好了,废话不多说,地图如何构建大家都会了吧,这里就不多说了。折线明显是个数组(经纬度)。...

  • iOS-根据地图经纬度,描点划出路线

    根据地图经纬度,描点划出路线 给折线定义坐标,然后把折线加到地图上 代码中locations是存放了地图经纬度的一...

  • 百度地图自定义气泡

    iOS-百度地图自定义气泡IOS百度地图自定义大头针和气泡 重点是定义了一个全局变量来取气泡的数据模型:stati...

  • 1.百度地图bug

    1.百度地图接口蓝屏 百度地图接口蓝屏————自定义地图大小不能使用标签名百度地图经纬度数值过大:百度1.0表示的...

  • 集成百度地图,看看就好

    集成百度地图,实现基本定位,检索,自定义大头针。 1.集成百度地图,当然前提还是去注册百度地图开发者 2.接下来创...

  • 百度地图定位工具类

    导语: 公司的项目中用到了百度地图的相关功能(定位、导航、自定义大头针)其中封装了几个百度地图的工具类,方便开发使...

  • iOS 系统自带API地图开发相关(二)

    地图-自定义大头针 关于大头针视图分两类: MKPinAnnotationView : apple自带的大头针,可...

  • 百度地图接口样例

    百度地图api接口 首先在百度地图开放平台申请 AK 1.根据地址经纬度获取标志建筑物 2.获取地址经纬度 3.关...

  • 获取位置信息

    添加权限: 动态权限 获取位置信息: 根据经纬度去请求百度地图或者高德地图的WebApi获取位置信息: 百度地图百...

  • iOS Mapkit的使用

    【iOS】Mapkit的使用:地图显示、定位、大头针、气泡等 标签:iOS地图mapkit 1.显示地图 (1)首...

网友评论

    本文标题:iOS 百度地图根据已知的经纬度画折线(包括大头针的自定义)

    本文链接:https://www.haomeiwen.com/subject/ydjurqtx.html