iOS 地图开发小结

首先来说说ios地图开发使用的主要类:

MKMapView:地图控件,无其他Label等控件无异,拖进来就可以用了,用于地图的内容的显示,用户可以对地图进行放大、缩小、拖动、旋转等操作;

CLLocationCoordinate2D :坐标,包括经度和纬度;

MKCoordinateSpan :地图跨度,表示地图放大倍数,数值越小地图显示的单位越精细;

CLLocationManager :用户所在位置的管理类,通过该类的能够获取用户所在的GPS坐标。

下面与大家分享一些个人项目中地图部分所涉及到的知识,都是入门级别的,大神请绕过:

1、地图显示

地图显示抓住两个要素,一是中心坐标点,二是地图跨度。假设坐标中心点为(0,0),跨度为(8, 6),则地图的显示范围为[-4, -3]到[4, 3]。代码如下:

  //设置中心坐标点
  CLLocationCoordinate2D curLocation;
  curLocation.latitude = 23.9098099;
  curLocation.longitude = 112.980980;

  //设置地图跨度
  MKCoordinateSpan span;
  span.latitudeDelta = 0.008;
  span.longitudeDelta = 0.008;

  //显示地图
  MKCoordinateRegion region = {curLocation, span};
  [self.mapView setRegion:region animated:NO];

如代码所示,设置好中心坐标点和地图跨度后,调用setRegion完成地图的显示,其中animated参数表示是否在显示地图时使用动画。

2、定位

如何获取我们目前所在的位置并并将其显示在地图上呢?

前面介绍的CLLocationManager的派上用场了,分三步进行。

第一步:开启app的定位功能:

        if (self.locationManager == nil){
            self.locationManager = [[CLLocationManager alloc] init];
            self.locationManager.delegate = self;
            self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
            self.locationManager.distanceFilter = 1000.0;
            NSLog(@"寮€濮嬪畾浣?);
            [self.locationManager startUpdatingLocation];
        }

第二步:获取用户的所在位置,这里通过实现CLLocationManager的代理类CLLocationManagerDelegate中的didUpdateLocations代理方法来获取用户的所在位置:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    NSLog(@"didUpdateLocations");

    CLLocation *newLocation = [locations lastObject];
    CLLocationCoordinate2D curLocation = newLocation.coordinate;

}

注意了,locations是一个数组,数组最后一个元素表示用户最新的位置,千万别取第一个,developer中心有说明,具体自己去看看吧。

第三步:根据第二步得到的坐标显示地图,这里要注意了,第二步得到的是用户的GPS坐标,但是MKMapView控件国内使用的是高德的数据源,也就是说地图是按照高德坐标系显示的,所以在显示之前我们首先需要将GPS坐标转换为高德坐标。这里插一些地图坐标系的其他知识,国内高德地图和腾讯地图使用的是GCJ-02坐标系,俗称火星坐标系,百度使用的是bd-09,为了保密,GPS坐标与这两种坐标都不能进行线性转换,因此,我们在做APP时,需要通过地图LBS平台的webservice访问进行坐标转换。百度和腾讯的webservice
API大同小异,具体可以参考http://lbs.qq.com/webservice_v1/index.html。坐标转换时,只需要使用坐标转换的webservie api即可,用户将GPS经纬度作为http请求参数,发起请求,服务器返回转换后的坐标,然后按照第一部分的“地图显示”照葫芦画瓢显示地图。

3、地图注释(大头针)

对感兴趣的地点做标注。可以实现MKMapViewDelegate类中的方法来修改大头针的显示样式:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    NSLog(@"viewForAnnotation");

    AnnotationView *annotationView = (AnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CalloutView"];
    if (!annotationView) {
        annotationView = [[AnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CalloutView"];
    }

    annotationView.image = [UIImage imageNamed:@"green_pin"]; //更换大头针的图片

    return nil;
}

4、overlay

有点类似于图层的含义。如地图上的所有公路算是一个overlay,河流也算一个overlay。这样理解的话,我们在地图上绘制线条的时候,相当于在地图上新增一个overlay。

这里给出在地图上划线的代码:

    int coordsCount = [_effectiveFootprints count];
    if (coordsCount > 1) {
        NSMutableArray *overlays = [[NSMutableArray alloc] init];
        CLLocationCoordinate2D coordinateArray[coordsCount];
        for (int i = 0; i < coordsCount; i++) {
            FootprintItem *item = [_effectiveFootprints objectAtIndex:i];
            coordinateArray[i].latitude = item.geoPosInfo.latitude;
            coordinateArray[i].longitude = item.geoPosInfo.longitude;
        }
        MKPolyline *lineOne = [MKPolyline polylineWithCoordinates:coordinateArray count:coordsCount];
        [overlays addObject:lineOne];
        [self.mapView addOverlays:overlays]; //添加overlay
    }

然后实现代理方法:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
    NSLog(@"viewForOverlay");

    if ([overlay isKindOfClass:[MKPolyline class]]) {

        MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];

        polylineView.strokeColor = [UIColor colorWithHexString:@"#996842"];  //线条颜色

        polylineView.lineDashPhase = 2; //线条样式
        NSArray* array = [NSArray arrayWithObjects:[NSNumber numberWithInt:5], [NSNumber numberWithInt:5], nil];
        polylineView.lineDashPattern = array;

        polylineView.lineWidth = 3.0;  //线条粗细
        return polylineView;
    }

    return nil;
}
时间: 2024-10-24 08:52:47

iOS 地图开发小结的相关文章

iOS线程开发小结

/* 方法名决定是否开启新线程(async,sync),队列类型(全局队列,串行队列)决定开启多少条线程 1.快速线程调用 *开启后台线程执行任务 [self performSelectorInBackground:@selector(test) withObject:nil]; *回到主线程执行任务 [self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES]; 2.GCD

iOS地图开发MapKit

现在O2O应用非常火,因为基于地理的社交和电子商务应用都有非常广阔的前景 二O2O的移动载体就是手机了(平板基本忽略不计),所以会点手机上Map开发还是不错的 首先苹果已经封装了一套地图框架供我们使用,首先要使用苹果提供的地图框架需要导入MapKit框架 导入完成后即可使用 首先在你的视图里拖入一个MapView, 然后运行就行了~这是你就会看到地图(如果用的是真机最好,模拟器有点蛋疼) 但是现实的是一个大大的地图,赶脚没什么用,我们需要的是一个比较精准的地图,这时进入MKMapView.h文件

iOS地图开发

原文地址:http://www.jianshu.com/p/1ae98a3ff9e4 在iOS中, 地图开发经常会用到的三个框架, 一个是苹果系统自带的MapKit框架, 另外两个, 一个是百度地图BMKMapView, 另一个是高德地图MAMapView. 当时我莫名的对一个问题产生了浓厚的兴趣, 就是百度地图和高德地图英文命名是什么意思!? 于是我就毫不蛋疼的去googol了, 而且还在他俩的社区提问这个问题! 终于, 在我的努力下弄明白他俩代表的意思了. 先看百度地图 BMKMapView

iOS 地图开发MapKit和CLLocation

1,iOS 定位服务 现在对iOS下的定组件建进行如下分类: 1>,无限蜂窝定位,根据移动设备距离基站的位置来实现定位的. 2>,GPS定位,也就是所谓的卫星定位,定位精确度较高,但是受遮盖环境影响较大, 3>,无线wifi定位,根据定位路由器的位置,实现定位, 4>,蓝牙beacon定位,定位精确度高,但是要求在外设的覆盖区域内 下面我们主要讲讲iOS下面的定位吧,主要框架CoreLocation.framework,主要对象CLLocationManager,主要代理CLLoc

iOS地图开发详解一(MKMapView)

一.ios地图说明 ios中自带有地图,之前使用的时谷歌的,不过现在使用的是高德地图,另外在国内,百度地图也很常用. 二.代码实现 1.导入框架 导入MapKit框架如下图所示 2.创建并显示地图 经过以上两步,地图已经可以显示出来了 注意:以上步骤一定要来联网的基础上进行,否则只会看到格子而不会显示地图. 3.设置显示区域 上面的操作显示的地图并不能满足要求,因为它显示的不是我们想要的区域,下面我们说下怎样设置当前显示区域 网上查到北京故宫博物馆的纬度和经度为{39.918031,116.40

iOS地图开发-基本使用

地图的基本使用 1.设置地图显示类型 /** MKMapTypeStandard = 0, // 标准 MKMapTypeSatellite, // 卫星 MKMapTypeHybrid, // 混合(标准+卫星) MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体卫星 MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体混合 */ self.cus

[IOS地图开发系类]2、位置解码CLGeocoder

  接第一步的操作,获取到地址信息经纬度后,我们可以对其进行解码,解码采用的CLGeocoder这个类,使用方式如下: 1.在ViewControlelr.m文件中声明一个CLGeocoder的属性,给页面加一个button,然后在处理方法中,对上一篇获取的地址坐标进行解码, code如下 #import "ViewController.h" #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h&

iOS定位服务与地图开发(1)---获取经纬度

定位服务是通过GPS等方式查找定位自己的位置的,再通过地图标注出来. 在iOS中定位服务和地图开发是使用两套API分别完成的. 1.定位服务: iOS系统提供3种不同定位途径: 1>WiFi定位:通过查询一个WiFi路由器的地理位置信息,iPhone.iPod Touch.iPad都可以采用. 2>蜂窝式移动电话基站定位:通过移动运营商基站定位 3>GPS卫星定位:通过3~4颗GPS卫星位置定位,最为准确,但是耗电量大 iOS不像Android系统在定位服务编程时可以指定采用哪种途径进行

iOS定位服务与地图开发(4)---显示地图

iOS 6之前,苹果使用的是谷歌地图,iOS 6之后,苹果使用了自己的地图(国内好像用的是高德地图),但是API编程接口与iOS 5相比没有太大变化. iOS 应用程序中使用Map Kit API开发地图应用程序,使用MKMapView类作为地图显示视图,其委托协议是MKMapViewDelegate. 1.显示地图: .h文件中代码 #import <MapKit/MapKit.h> @interface YXCViewController <MKMapViewDelegate>