文章目录
  1. 1. 前言
    1. 1.1. 地理编码
  2. 2. 系统地图
  3. 3. 高德地图
  4. 4. 百度地图
    1. 4.1. 标注

前言


大家对于地图并不陌生,在迷路的时候,地图指引着我们前进的方向,为我们增加动力。

地理编码


地理编码是指将地址信息建立空间坐标关系的过程,可分为正向地理编码反向地理编码正向地理编码指的是由地址信息转换为坐标点的过程。 反向地理编码实现了将地球表面的地址坐标转换为标准地址(所处行政区域、所处街道、门牌号等)的过程。

地球坐标:一般全球坐标指的就是 GPS 所用的 WGS84 坐标系统;火星坐标(GCJ-02 坐标系统):在地球坐标基础上加密的结果,一套标准测绘系统;百度坐标:在火星坐标的基础上二次加密,输入百度坐标即可得到火星坐标。

系统地图


标注–大头针
标注点和标注 View
添加标注点,调用标注 View 的协议代理方法

高德地图


百度地图


地图上自定义的标注点和覆盖物我们统称为地图覆盖物。您可以通过定制 BMKAnnotation 和 BMKOverlay 来添加对应的标注点和覆盖物。地图覆盖物的设计遵循数据与 View 分离的原则,BMKAnnotation 和 BMKOverlay 系列的类主要用来存放覆盖物相关的数据,BMKAnnotaionView 和 BMKOverlayView 系列类为覆盖物对应的 View。

标注


BMKAnnotation为标注对应的protocal,您可以自定义标注类实现该protocal。百度地图SDK也预置了基本的标注点(BMKPointAnnotation)和一个大头针标注View(BMKPinAnnotationView),您可以直接使用来显示标注。方法如下:
第一步,修改您的ViewController.h文件,添加以下代码,使您的ViewController实现BMKMapViewDelegate协议:

1
2
3
4
@interface AnnotationDemoViewController : UIViewController <bmkmapviewdelegate> {     
IBOutlet BMKMapView* _mapView;
}
@end

第二步,修改您的ViewController.m文件,实现BMKMapViewDelegate的_mapView:viewForAnnotation:函数,并在viewDidAppear添加标注数据对象,核心代码如下:

1
2
3
4
5
6
7
8
9
10
- (void) viewDidAppear:(BOOL)animated {    
// 添加一个PointAnnotation
BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
CLLocationCoordinate2D coor;
coor.latitude = 39.915;
coor.longitude = 116.404;
annotation.coordinate = coor;
annotation.title = @"这里是北京";
[_mapView addAnnotation:annotation];
}

1
2
3
4
5
6
7
8
9
10
11
// Override  
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation
{
if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
newAnnotationView.pinColor = BMKPinAnnotationColorPurple;
newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
return newAnnotationView;
}
return nil;
}

参考资料


文章目录
  1. 1. 前言
    1. 1.1. 地理编码
  2. 2. 系统地图
  3. 3. 高德地图
  4. 4. 百度地图
    1. 4.1. 标注