iOS
アプリの場合(iOS7
)、アプリの読み込み時にユーザーの現在地を表示する必要があります。Google Maps iOS SDK
。私はこれをフォローしています Google Map しかし、私は理解できません。あなたがパスを通過する場合助けてください。
そうみたいです Google Maps iOS SDK
デバイスの位置にアクセスできません。したがって、CLLocationManager
of 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's 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);
}
}
以前の答えを忘れてください。ネイティブのMapKit.frameworkを使用するとうまく機能します。
実際、iOS向けGoogleMapsがすべての作業を行います。 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
私があなたに与えたドキュメントとフレームワークに含まれているサンプルを使えば、あなたがやりたいことができるはずです。
Xcode + Swift + Google Maps iOS
段階的なレシピ:
1.)キー文字列をInfo.plistに追加します(ソースコードとして開きます):
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs your location to function properly</string>
2.)CLLocationManagerDelegate
をView Controllerクラスに追加します。
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.)場所の変更にオブザーバブルを追加します。
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!")
}
}
それでおしまい!
任意のiOSデバイスで、 Core Location を使用してユーザーの場所を取得します。具体的には、 CLLocation クラス(およびCLLocationManager)が必要です。
デリゲートメソッド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
現在の場所がシミュレータに表示されない...実際のデバイスを接続して試してみる