IOS開発mapkit学習ノート

11166 ワード

IOSで位置情報を使用する場合、アップルが提供するSDK:mapkitを使用する必要があります.地図情報のカスタマイズ表示の目的を達成するために、異なるAPIを使用することができます.
(一)地図を使用して操作する場合は、まず(MKmapview)で地図の内容を表示および操作するための環境を設定する必要があります.
ではMKmapviewとは?
MKmapviewは、地図アプリケーションが直接提供してくれたように、地図を操作するインタフェースを提供してくれました.地図情報を表示したり、アプリケーションからの地図内容を操作したり、地図を一定の座標に位置決めして表示したりして、表示する地図領域の大きさを設定したりすることができます.もちろん、地図に注釈やカスタム情報を追加することもできます.
    MKMapView* mapView = [[MKMapView alloc]initWithFrame:self.view.bounds];    //           map  

     mapView.mapType = MKMapTypeHybrid;     //        :    ,    ,    

     mapView.zoomEnabled = YES;    //       

     mapView.scrollEnabled = YES;    //       

     mapView.showsUserLocation = YES;  //             

     [self.view add mapView];

 
(二) システムが提供するAnotationを使用して、ユーザーの現在位置情報を表示します.
注:corelocationフレームワークを追加する必要があります.delegateメソッドを設定し、annotationを追加すると、次のメソッドが実装されると、システムは彼を呼び出し、実装されていない場合、システムのデフォルトの戻り値は空になります.
[- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;]  ,        annotation ,        nil;    
     CLLocationCoordinate2D coordinate = {34.7568711,113.663221};    MKUserLocation *location = [[MKUserLocationalloc]init];    location.title = @"beijing";    location.subtitle = @"subTitle";    location.coordinate = coordinate;      [mapView addAnnotation:location];

 
(3)setReginメソッドを使用して、地図に座標位置領域を表示させる
    CLLocationCoordinate2D coordinate = {34.7568711,113.663221};      //         

    MKCoordinateSpan span = {100,100};    //

      MKCoordinateRegion regin;

     regin = MKCoordinateRegionMake(coordinate, span);

     [mapView setRegion:regin];

 
(四)CLLocationmanagerを使用して現在の地理的位置のリアルタイム変化情報を追跡する 
     CLLocationManager *manager = [[CLLocationManageralloc]init];

      manager.desiredAccuracy = kCLLocationAccuracyBest;

      manager.delegate = self;

      manager.distanceFilter = 100;

      [self.managerstartUpdatingLocation];

注:delegateを設定すると、次のdelegateメソッドが呼び出されます.
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation  fromLocation:(CLLocation *)oldLocation

{

    CLLocationDistance oldDistance = [newLocation distanceFromLocation:oldLocation];

    NSLog(@"old:%f",oldDistance);

}

または
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations  //

{

}

 
(五)カスタムannotationラベルの設定
  (1)  Annotationのアイコンを大きなアイコン形式に変更するには、システムが提供する方法を使用します.
      MKPointAnnotation *anotation = [[MKPointAnnotationalloc]init];

      anotation.coordinate = coordinate;

      anotation.title = @"henan";

      anotation.subtitle = @"qingyun";

      [mapView addAnnotation:anotation];

  
  (2)カスタムスタイルのAnnotation方式の設定
     このメソッドを呼び出すと、以下のメソッドが自動的に呼び出されるため、システムが提供するviewで各設定をカスタマイズできます.
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation

{

    static NSString *identify = @"identify"if ([annotation isKindOfClass:[MKUserLocation class]])

        {

            return nil;

        }

            MKAnnotationView *pinView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:identify];

            if (pinView == nil) {

                pinView = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identify];

            }

            pinView.tintColor = [UIColor greenColor];

            pinView.canShowCallout = YES;        //           Annotation  ,          Annotation,      

            pinView.image = [UIImage imageNamed:@"icon_nav_start"];         //           Annotation  ,           

           
       UIImageView
*leftView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"icon"]]; leftView.frame = CGRectMake(0, 0, 40, 40); pinView.leftCalloutAccessoryView = leftView;
UIButton
*button = [UIButtonbuttonWithType:UIButtonTypeDetailDisclosure]; button.frame = CGRectMake(0, 0, 30, 20); pinView.rightCalloutAccessoryView = button; return pinView; }

 
  (3)Annotationグラフィックの完全なカスタマイズを実現するには、MKAnnotationから継承されたクラスを作成し、クラスで次の方法を実現する必要があります.
- (void)setSelected:(BOOL)selected animated:(BOOL)animated

{

    [super setSelected:selected animated:YES];

    UIView *view  = [[UILabel alloc] initWithFrame:CGRectMake(-40, -40, 100, 40)];

    view.backgroundColor = [UIColororangeColor];

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];

    imageView.image = [UIImage imageNamed:@"icon"];

    [view addSubview:imageView];

    [self addSubview:view];

}

 
(六)座標位置の逆符号化を実現する:すなわち正確な座標を手に入れた後、迅速に相応の地理位置を探す
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];

    CLLocation *location = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];

    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {

     if (nil != error) {

            NSLog(@"error info is %@",error);

            return ;

        }

        for (CLPlacemark *placeMark in placemarks) {

            NSLog(@"%@,%@,%@,%@",placeMark.country,placeMark.administrativeArea,placeMark.locality,placeMark.thoroughfare);

        }

}];