Для моего приложения iOS
(здание в iOS7
) мне нужно показать текущее местоположение пользователя при загрузке приложения. Я использую Google Maps iOS SDK
. Я следую этому
Карта Google
Но я не могу понять это. Пожалуйста, помогите, если вы пройдете путь.
SDK Google Maps iOS, получение текущего местоположения пользователя
Ответ 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 недействительным?
- (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;
}
- добавить в библиотеку всю необходимую библиотеку и фреймворки если карта google не работает, это означает, что вам нужно добавить необходимую инфраструктуру все лучшие игры с картой google