web-dev-qa-db-ja.com

MKMapViewからユーザーの場所を取得する

MKMapViewの独自のロケーションマネージャーを使用して、ユーザーの現在位置を返し、Webサービスに渡すことはできますか?

私が持っています mapView.showsUserLocation=YES;そして、これは私の場所に有効な青い点を返しますが、シミュレータでは、そのクパチーノ-それは問題ありませんが、私が見たとき

mapView.userLocation.coordinate.latitude、これは180ですが、CLLocationManagerは正しい値37.3317を返します。

3つのタブで複数のロケーションマネージャーを使用しないようにしたいので、独自のmapViewsを使用すると便利です。

ありがとう。

27
joec

あなたはcan MKMapViewからユーザーの場所を取得します。プロパティの取得でプロパティが欠落しているだけです。そのはず:

_mapView.userLocation.location.coordinate.latitude;
_

userLocationは、CLLocationロケーション属性とBOOL更新属性のみを格納します。座標を取得するには、location属性に移動する必要があります。

-ドリュー

編集:MKMapViewのuserLocationは、マップの読み込みが完了するまで更新されません。チェックが早すぎるとゼロが返されます。これを回避するには、MKMapViewDelegateメソッド-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocationを使用することをお勧めします。

44
Drew C

したがって、一意のCLLocateManagerを使用するには、マップするすべての代理オブジェクトとなるクラスを作成することができます。

_self.locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = self;_

次のようなことをしてください:

_self.locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = mySharedDelegate;_

MySharedDelegateは、すべてのCLLocationManagerデリゲートメソッドを持つクラスです。

の最初の呼び出し後にのみ、userLocationの有効な座標を取得できます

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

このメソッドが呼び出されるのは、GPSが新しい場所を見つけたためです。そのため、青い点がそこに移動し、userLocationが新しい座標になります。

CLLocationManagerデリゲートで次のメソッドを使用して、現在の場所が見つかったときにログに記録します。

_- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"---------- locationManager didUpdateToLocation");
    location=newLocation.coordinate;

    NSLog(@"Location after calibration, user location (%f, %f)", _mapView.userLocation.coordinate.latitude, _mapView.userLocation.coordinate.longitude);
}_

アイデアはありますか?

乾杯、
VFN

3
vfn
    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
    {
        NSLog(@"welcome into the map view annotation");

        // if it's the user location, just return nil.
        if ([annotation isKindOfClass:[MyMapannotation class]])
        {
            MyMapannotation *annotation12=(MyMapannotation *)annotation;
            // try to dequeue an existing pin view first
            static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
            MKPinAnnotationView* pinView = [[MKPinAnnotationView alloc]
                                            initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] ;
            pinView.animatesDrop=YES;
            pinView.canShowCallout=YES;
            pinView.pinColor=MKPinAnnotationColorPurple;
            pinView.tag=annotation12.tag;

            UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            [rightButton setTitle:annotation.title forState:UIControlStateNormal];
            rightButton.tag=annotation12.tag;
            [rightButton addTarget:self
                            action:@selector(showDetails:)
                  forControlEvents:UIControlEventTouchUpInside];
            pinView.rightCalloutAccessoryView = rightButton;
            UIImageView *profileIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"artpin"]];
            pinView.image = profileIconView.image;
            return pinView;
        }
        else
            return nil;
     }

    -(IBAction)showDetails:(id)sender
    {
        UIButton *btn=(UIButton *)sender;

    }


    -(void)Load_mapview
    {


        for (int i=0; i<[arr_nearby count]; i++)
        {
            NSNumber *latitude = [[[[arr_nearby objectAtIndex:i] valueForKey:@"geometry"] valueForKey:@"location"] valueForKey:@"lat"];

            NSNumber *longitude = [[[[arr_nearby objectAtIndex:i] valueForKey:@"geometry"] valueForKey:@"location"] valueForKey:@"lng"];

            NSString *title = [[arr_nearby objectAtIndex:i] valueForKey:@"name"];

            //Create coordinates from the latitude and longitude values

            CLLocationCoordinate2D coord;

            coord.latitude = latitude.doubleValue;

            coord.longitude = longitude.doubleValue;

            MyMapannotation *annotation = [[MyMapannotation alloc] initWithTitle:title AndCoordinate:coord andtag:i];
            [_map_nearby addAnnotation:annotation];


          //  [annotations addObject:annotation];

        }

        [self zoomToLocation];


    }
    -(void)zoomToLocation

    {

        CLLocationCoordinate2D zoomLocation;

        zoomLocation.latitude = [[[[[arr_nearby objectAtIndex:0] valueForKey:@"geometry"] valueForKey:@"location"] valueForKey:@"lat"] floatValue];

        zoomLocation.longitude= [[[[[arr_nearby objectAtIndex:0] valueForKey:@"geometry"] valueForKey:@"location"] valueForKey:@"lng"] floatValue];

        MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 7.5*5,7.5*5);

        [_map_nearby setRegion:viewRegion animated:YES];

        [_map_nearby regionThatFits:viewRegion];

    }

//
//  MyMapannotation.h
//  IOS_Googgle
//
//  Created by Vivek Chauhan on 27/06/16.
//  Copyright (c) 2016 anand. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>


@interface MyMapannotation : NSObject <MKAnnotation>

@property (nonatomic,copy) NSString *title;
@property (nonatomic,assign) int tag;


@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

-(id) initWithTitle:(NSString *) title AndCoordinate:(CLLocationCoordinate2D)coordinate andtag:(int)tagofbutton;


@end


//
//  MyMapannotation.m
//  IOS_Googgle
//
//  Created by Vivek Chauhan on 27/06/16.
//  Copyright (c) 2016 anand. All rights reserved.
//

#import "MyMapannotation.h"

@implementation MyMapannotation

@synthesize coordinate=_coordinate;

@synthesize title=_title;
@synthesize tag=_tag;


-(id) initWithTitle:(NSString *) title AndCoordinate:(CLLocationCoordinate2D)coordinate andtag:(int)tagofbutton

{

    self = [super init];

    _title = title;

    _coordinate = coordinate;
    _tag=tagofbutton;

    return self;

}
@end
0
Quality Analyst