Подтвердить что ты не робот

SDK Google Maps iOS, получение текущего местоположения пользователя

Для моего приложения iOS (здание в iOS7) мне нужно показать текущее местоположение пользователя при загрузке приложения. Я использую Google Maps iOS SDK. Я следую этому Карта Google Но я не могу понять это. Пожалуйста, помогите, если вы пройдете путь.

4b9b3361

Ответ 1

Кажется, что Google Maps iOS SDK не может получить доступ к позиции устройства. Таким образом, вам нужно получить позицию с помощью CLLocationManager iOS.

Сначала добавьте CoreLocation.framework к вашему проекту:

  • Перейдите в Project Navigator
  • Выберите свой проект
  • Нажмите вкладку Build Phases
  • Добавьте CoreLocation.framework в Link Binary with Libraries

Тогда вам нужно всего лишь выполнить основной пример документации Apple.

  • Создайте CLLocationManager, возможно, в вашем ViewDidLoad:

    if (nil == locationManager)
        locationManager = [[CLLocationManager alloc] init];
    
    locationManager.delegate = self;
    //Configure Accuracy depending on your needs, default is kCLLocationAccuracyBest
    locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
    
    // Set a movement threshold for new events.
    locationManager.distanceFilter = 500; // meters
    
    [locationManager startUpdatingLocation];
    

При использовании CLLocationManagerDelegate каждый раз, когда позиция обновляется, вы можете обновить позицию пользователя на Google Maps:

- (void)locationManager:(CLLocationManager *)manager
      didUpdateLocations:(NSArray *)locations {
    // If it a relatively recent event, turn off updates to save power.
   CLLocation* location = [locations lastObject];
   NSDate* eventDate = location.timestamp;
   NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
   if (abs(howRecent) < 15.0) {
      // Update your marker on your map using location.coordinate.latitude
      //and location.coordinate.longitude); 
   }
}

Ответ 2

Забудьте мой предыдущий ответ. Он хорошо работает, если вы используете родную MapKit.framework.

Фактически, GoogleMaps для iOS выполняет всю работу за вас. Вам не нужно напрямую использовать CoreLocation.

Единственное, что вам нужно сделать, это добавить yourMapView.myLocationEnabled = YES;, и инфраструктура сделает все. (За исключением центра карты на вашей позиции).

Что я сделал: я просто выполнил следующие шаги documentation. И я получил карту, сосредоточенную на Сиднее, но если бы я увеличил масштаб и переместился на свое место (если вы используете реальное устройство, в противном случае используйте инструменты симулятора, чтобы сосредоточиться на местоположении Apple), я мог видеть голубую точку на моем месте.

Теперь, если вы хотите обновить карту, чтобы следить за своей позицией, вы можете скопировать пример Google MyLocationViewController.m, который включен в каталог фреймворка. Они просто добавляют наблюдателя в свойство myLocation для обновления свойств камеры:

@implementation MyLocationViewController {
  GMSMapView *mapView_;
  BOOL firstLocationUpdate_;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
                                                          longitude:151.2086
                                                               zoom:12];

  mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  mapView_.settings.compassButton = YES;
  mapView_.settings.myLocationButton = YES;

  // Listen to the myLocation property of GMSMapView.
  [mapView_ addObserver:self
             forKeyPath:@"myLocation"
                options:NSKeyValueObservingOptionNew
                context:NULL];

  self.view = mapView_;

  // Ask for My Location data after the map has already been added to the UI.
  dispatch_async(dispatch_get_main_queue(), ^{
    mapView_.myLocationEnabled = YES;
  });
}

- (void)dealloc {
  [mapView_ removeObserver:self
                forKeyPath:@"myLocation"
                   context:NULL];
}

#pragma mark - KVO updates

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {
  if (!firstLocationUpdate_) {
    // If the first location update has not yet been recieved, then jump to that
    // location.
    firstLocationUpdate_ = YES;
    CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey];
    mapView_.camera = [GMSCameraPosition cameraWithTarget:location.coordinate
                                                     zoom:14];
  }
}

@end

С документом, который я дал вам, и образцы, включенные в структуру, вы сможете делать то, что хотите.

Ответ 3

Xcode + Swift + Google Карты iOS

Пошаговый рецепт:

1.) Добавить строку ключа в Info.plist (открыть как исходный код):

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs your location to function properly</string>

2.) Добавьте CLLocationManagerDelegate в ваш класс контроллера представления:

class MapViewController: UIViewController, CLLocationManagerDelegate {
   ...
}

3.) Добавьте CLLocationManager в свой класс:

var mLocationManager = CLLocationManager()
var mDidFindMyLocation = false

4.) Запросите разрешение и добавьте наблюдателя:

override func viewDidLoad() {
        super.viewDidLoad()          

        mLocationManager.delegate = self
        mLocationManager.requestWhenInUseAuthorization()
        yourMapView.addObserver(self, forKeyPath: "myLocation", options: NSKeyValueObservingOptions.new, context: nil)
        ...
}

5.) Дождитесь авторизации и включите местоположение в Google Maps:

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {

        if (status == CLAuthorizationStatus.authorizedWhenInUse) {
            yourMapView.isMyLocationEnabled = true
        }

    }

6.) Добавьте наблюдаемые для изменения местоположения:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

        if (!mDidFindMyLocation) {

            let myLocation: CLLocation = change![NSKeyValueChangeKey.newKey] as! CLLocation

            // do whatever you want here with the location
            yourMapView.camera = GMSCameraPosition.camera(withTarget: myLocation.coordinate, zoom: 10.0)
            yourMapView.settings.myLocationButton = true

            mDidFindMyLocation = true

            print("found location!")

        }

    }

Это!

Ответ 4

На любом устройстве iOS найдите местоположение пользователя Местоположение ядра. В частности, вы хотите CLLocation class (и CLLocationManager).

Ответ 5

Является ли метод делегата didTapMyLocationButton недействительным?

https://developers.google.com/maps/documentation/ios/reference/protocol_g_m_s_map_view_delegate-p#ac0e0171b811e839d9021800ca9fd33f4

- (BOOL)didTapMyLocationButtonForMapView:(GMSMapView *)mapView {
    return YES;
}

И вы можете получить местоположение

(lldb) po mapView.myLocation
<+37.33243033,-122.03088128> +/- 386.93m (speed -1.00 mps / course -1.00) @ 5/19/14, 6:22:28 PM Moscow Standard Time

Ответ 6

Текущее местоположение не будет отображаться на симуляторе... подключите реальное устройство и попробуйте Я провел 2 дня в симуляторе и не знаю, что он не имитирует местоположения.

Ответ 7

существует много методов... Я использовал этот метод, и он работает во всех случаях. Google дает вам все с ответом в формате json и на вас, как вы справляетесь с этими данными.

Некоторые шаги по загрузке карты google в вашем проекте.

  • найдите ключ api по этой ссылке https://developers.google.com/places/ios-api/ войдите в свою учетную запись google и добавьте свой проект и создайте ключ ios. затем используйте это в своем проекте

  • включить все api, необходимые для карты google

a-googlemaps sdk для ios b-googlemap direction api c- "" javasripts api d-picker api e-сайты api для ios f матрица расстояния api

в методе appdelegate...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [GMSServices provideAPIKey:@"xxxxxxxx4rilCeZeUhPORXWNJVpUoxxxxxxxx"];

    return YES;
}
  1. добавить в библиотеку всю необходимую библиотеку и фреймворки если карта google не работает, это означает, что вам нужно добавить необходимую инфраструктуру все лучшие игры с картой google