对于我的iOS
应用(在iOS7
中构建),我需要在应用加载时显示用户的当前位置。我正在使用Google Maps iOS SDK
。我跟着这个
Google Map
但我无法弄明白。如果你走过这条路,请帮忙。
答案 0 :(得分:40)
忘记我之前的回答。如果使用本机MapKit.framework,它可以很好地工作。
事实上,GoogleMaps for iOS可以为您完成所有工作。您不必直接使用CoreLocation。
您唯一需要做的就是添加yourMapView.myLocationEnabled = YES;
,框架将完成所有工作。 (除了你位置上的地图中心)。
我做了什么:我只是按照以下documentation的步骤进行操作。我得到了一张以悉尼为中心的地图但是如果我缩小并移动到我的地方(如果你使用真实的设备,否则使用模拟器工具以苹果的位置为中心),我可以看到我的位置上的蓝点
现在,如果您想要更新地图以跟随您的位置,您可以复制框架目录中包含的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
根据我给你的文件和框架中包含的样本,你应该能够做你想做的事。
答案 1 :(得分:9)
似乎Google Maps iOS SDK
无法访问设备位置。
因此,您必须使用CLLocationManager
的{{1}}来检索位置。
首先,将iOS
添加到您的项目中:
CoreLocation.framework
Project Navigator
Build Phases
CoreLocation.framework
然后你需要做的就是遵循Apple documentation的基本例子。
可能在Link Binary with Libraries
:
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
答案 2 :(得分:3)
Xcode + Swift + Google Maps 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地图中启用位置:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if (status == CLAuthorizationStatus.authorizedWhenInUse) {
yourMapView.isMyLocationEnabled = true
}
}
6。)添加observable以改变位置:
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!")
}
}
就是这样!
答案 3 :(得分:2)
在任何iOS设备上,使用Core Location获取用户的位置信息。具体来说,您需要CLLocation类(和CLLocationManager)。
答案 4 :(得分:1)
委托方法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
答案 5 :(得分:0)
当前位置不会在模拟器上显示...连接一个真实的设备并尝试一下 我花了2天时间在模拟器中运行,并且不知道它没有模拟位置
答案 6 :(得分:-2)
有很多方法...... 我使用这种方法,它适用于所有情况。 Google以json格式为您提供所有响应,并为您提供处理该数据的方法。
您可以在项目中加载谷歌地图。
从此链接中找到api密钥https://developers.google.com/places/ios-api/ 使用您的Google帐户登录并添加您的项目并创建一个ios密钥。 然后在你的项目中使用它
启用Google地图所需的所有API
适用于ios的a-googlemaps sdk b-googlemap方向api c-“”javasripts api d-选择器api e-为ios放置api f distance matrix api
在appdelegate方法中...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GMSServices provideAPIKey:@"xxxxxxxx4rilCeZeUhPORXWNJVpUoxxxxxxxx"];
return YES;
}