百度地图之标注一组地理坐标<2>

一、需求

开发移动地图相关的应用有时会有这样的需求:在地图上显示自己的定位,然后想查看周边使用这个应用的有哪些人。当然完成这个功能需要后台数据的支持,你要把自己的位置信息发给后台,后台在根据你的位置查询数据库返回你周围的用户的信息,这些信息包括经纬度坐标、描述等。这里只描述客户端如何实现,至于后台返回的这些数据就在本地创建家数据了,下面就用百度地图实现这个功能。

二、实现效果展示

三、代码(定位功能上一篇文章已经描述,下面只实现显示一组坐标)

1、创建变量接受协议

@interface BaiduMapViewController ()<BMKMapViewDelegate,BMKLocationServiceDelegate>
{
    BMKMapView * _mapView; //地图
    BMKLocationService * _locationService; //定位

    NSMutableArray * _points;//地理坐标的集合
    NSMutableArray * _titles;//标注
}
@property (nonatomic,strong) CLLocationManager  *locationManager; //iOS8以后定位授权机制的改变,需要手动授权
@end

2、创建视图+初始化相应数据

- (void)viewDidLoad {
    [super viewDidLoad];
    _mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.view addSubview:_mapView];
    [_mapView setZoomLevel:14];
    //定位
    _locationService = [[BMKLocationService alloc]init];

    //显示周围
    UIButton * showAround = [UIButton buttonWithType:UIButtonTypeCustom];
    [showAround setTitle:@"显示周围" forState:UIControlStateNormal];
    [showAround setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
    showAround.frame = CGRectMake(200, 0, 80, 30);
    [showAround addTarget:self action:@selector(showAround) forControlEvents:UIControlEventTouchUpInside];
    [self.navigationController.navigationBar addSubview:showAround];

    //创建地理坐标和标注title
    CGPoint  item1 = CGPointMake(39.915101, 116.403981);
    CGPoint  item2 = CGPointMake(39.945210, 116.403981);
    CGPoint  item3 = CGPointMake(39.935301, 116.403991);
    CGPoint  item4 = CGPointMake(39.925421, 116.403971);
    _points  = [[NSMutableArray alloc] initWithObjects:NSStringFromCGPoint(item1),   NSStringFromCGPoint(item2),NSStringFromCGPoint(item3),NSStringFromCGPoint(item4),nil];

    _titles = [[NSMutableArray alloc]initWithObjects:@"天安门",@"神刹海",@"景山公园",@"故宫", nil];

}

3、管理地图的生命周期:自2.0.0起,BMKMapView新增viewWillAppear、viewWillDisappear方法来控制BMKMapView的生命周期,并且在一个时刻只能有一个BMKMapView接受回调消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中调用BMKMapView的对应的方法,并处理delegate

#pragma mark - viewWillAppear
-(void)viewWillAppear:(BOOL)animated{
    [_mapView viewWillAppear];
    _mapView.delegate = self;
    _locationService.delegate = self;
}

#pragma mark - viewDidAppear
-(void)viewWillDisappear:(BOOL)animated{
    [_mapView viewWillDisappear];
    _mapView.delegate = nil;
    _locationService.delegate = nil;

}

4、当点击“显示周边”按钮的时创建大头针

-(void)showAround{
    if (_points.count) {
        NSMutableArray * annotations = [[NSMutableArray alloc]init];
        for (int i = 0; i < _points.count; i++) {
            CGPoint point = CGPointFromString(_points[i]);
            CLLocationCoordinate2D pt = (CLLocationCoordinate2D){point.x,point.y};
            //创建大头针
            BMKPointAnnotation * item = [[BMKPointAnnotation alloc]init];
            //设置大头针的坐标
            item.coordinate = pt;
            //设置大头针的标注
            item.title = _titles[i];
            [annotations addObject:item];
            if(i == 0)
            {
                //将第一个点的坐标移到屏幕中央
                _mapView.centerCoordinate = pt;
            }

        }
        //添加大头针到地图上
        [_mapView addAnnotations:annotations];

    }
}

#pragma mark 当调用[_mapView addAnnotations:annotations]时回出发地图的代理方法,创建大头针
-(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation{
    NSString * ID = @"annotationViewID";
    BMKPinAnnotationView * view = (BMKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];
    if (view == nil) {
        view = [[BMKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:ID];
        view.pinColor = BMKPinAnnotationColorPurple;
        view.animatesDrop = YES;
    }
    view.centerOffset = CGPointMake(0, -(view.frame.size.height*.5));
    view.annotation = annotation; //设置代理
    view.canShowCallout = TRUE;
    return view;
}

关于地图的其他功能待续……

时间: 2024-10-31 08:45:45

百度地图之标注一组地理坐标<2>的相关文章

百度地图API标注+时间轴组合

百度地图API标注+时间轴组合 到新公司实习第八天,Boos让我结合百度地图api做一个动态展示标注变化的组件,要求地图展示某一天的标注,时间轴要求可以动态播放每一天的标注变化...然后我就开始coding... 准备工作: 申请百度api密钥(具体方法我也不多写了,大家应该都会) 了解一下百度地图API的开发指南和类参考文档(如果嫌麻烦的话 可以直接看Demo示例) 一.首先,先加载地图,你可以用实际的经纬度定位.浏览器定位.根据ip定位.根据城市名定位,这个你可以自己选择 // 创建Map实

百度地图拖动标注后获取坐标

本来想用图吧的API来做的,结果弄了下,在手机上弄不了.换用百度地图了..本功能个人觉得在很多地方用到,先记下来,省得每次都得翻地图API文档一点一点弄. 功能表现为: 地图一开始打开就定位到你的附近(以百度地图的浏览器定位为准),地图中心有一标注,鼠标拖去标注结果后弹框显示经纬度,自己测试过在手机上也是可以拖动的 代码如下: <!DOCTYPE html><html><head>    <meta http-equiv="Content-Type&qu

项目中的百度地图添加标注,动态弹框

1.最近项目开发中,用到了地图,需求是使用百度地图 初始化地图: var list = ""; var map = ""; var drawingManager = ""; if (typeof (BMap) == 'undefined') { //地图加载失败 document.getElementById("allmap").innerHTML = "地图加载失败"; } else { /** 百度地图

百度地图定位,标注以及地图中心点问题

关于百度地图的相关配置以及库的合并方法请查看官方文档,上面说的很详细, 下面是在配置好的基础上进行的. 1.引入百度地图的库的头文件 //百度地图    #import <BaiduMapAPI/BMapKit.h>    #import <BaiduMapAPI/BMKMapView.h> 2.我是直接使用xib进行开发的,我直接让当前显示地图的view继承自BMKMapView,建立属性连接 @property (strong, nonatomic) IBOutlet BMKM

iOS百度地图-BMK标注&amp;amp;覆盖物

在iOS开发中,地图算是一个比较重要的模块.我们常用的地图有高德地图,百度地图,谷歌地图,对于中国而言,苹果公司已经不再使用谷歌地图,官方使用的是高德地图.下面将讲述一下百度地图开发过程中的一些小的知识点. 对于如何配置百度地图的开发环境,在此不再讲述,具体可以参考:http://developer.baidu.com/map/index.php?title=iossdk/guide/buildproject 百度地图iOS的API下载地址:http://developer.baidu.com/

百度地图解决标注遮挡问题

1.由于两个终端或手机在一起,打开GPS的时候,获取的经纬度很近,会相互有遮挡,无法点击遮挡的标注, 这个时候要使用Marker的setTop(isTop:Boolean)方法,将标注置于其他标注之上.默认情况下,纬度较低的标注会覆盖在纬度较高的标注之上,从而形成一种立体效果.通过此方法可使某个标注覆盖在其他所有标注之上.注意:如果在多个标注对象上调用此方法,则这些标注依旧按照纬度产生默认的覆盖效果. 项目中是点击左侧列表,调用地图页面的一个方法 var leftMapUserId; funct

IOS 设置百度地图自定义标注图片,自定义泡泡

#pragma mark - BMKMapViewDelegate // 根据anntation生成对应的View - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation { //普通annotation NSString *AnnotationViewID = @"ClusterMark"; ClusterAnnotation

百度地图 删除标注

如何实现: 方法一.给地图增加一个事件监听,addEventListener,当右击地图时,出现右键菜单,可删除标注. 方法二.给标注增加事件监听,右键点击标注,即可删除 <!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv=&quo

百度地图 添加标注

给地图增加一个事件监听,addEventListener: 当鼠标点击地图时,首先获取改点坐标,其次在改点坐标处增加一个红色标注. <!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type"