gpt4 book ai didi

ios - 在谷歌地图上显示当前位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:28:12 25 4
gpt4 key购买 nike

我有一个 iOS 应用,它使用 Google Maps SDK 在我的应用中显示 map 。

我已经设法显示 map ,但我不知道如何将相机或标记设置为用户当前位置。

我已经对坐标进行了硬编码,只是为了测试 map 是否正常工作,但我现在陷入了如何显示用户当前位置的困境。

这是我的代码,用于将相机置于坐标中心

- (void)viewDidLoad
{
[super viewDidLoad];

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:47.995602 longitude:-78.902153 zoom:6];

self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

self.mapView.myLocationEnabled = YES;
self.mapView.mapType = kGMSTypeNormal;
self.mapView.accessibilityElementsHidden = NO;
self.mapView.settings.scrollGestures = YES;
self.mapView.settings.zoomGestures = YES;
self.mapView.settings.compassButton = YES;
self.mapView.settings.myLocationButton = YES;
self.mapView.delegate = self;
self.view = self.mapView;

[self placeMarkers];
}

这是在坐标处显示标记的代码

-(void)placeMarkers
{
GMSMarker *marker = [[GMSMarker alloc] init];

marker.position = CLLocationCoordinate2DMake(47.995602, -78.902153);
marker.title = @"PopUp HQ";
marker.snippet = @"Durham, NC";
marker.icon = [GMSMarker markerImageWithColor:[UIColor blueColor]];
marker.opacity = 0.9;
marker.map = self.mapView;
}

我试过如下获取当前位置:

CLLocationCoordinate2D *myLocation = self.mapView.myLocation.coordinate;

但是我得到了错误:

Initializing 'CLLocationCoordinate2D' with an expression of incompatible type 'CLLocationCoordinate2D'

如何获取当前位置以传递给相机和标记?

最佳答案

CLLocationCoordinate2D 只是一个包含纬度和经度的结构,因此您可以简单地使用

CLLocationCoordinate2D myLocation = self.mapView.myLocation.coordinate;

还值得使用 KVO 来观察 myLocation 的变化,因为 mapView 可能还没有有效的位置。

进一步解释 KVO:

您可以为 myLocation 属性添加一个观察者,如下所示:

[self.mapView addObserver:self
forKeyPath:@"myLocation"
options:(NSKeyValueObservingOptionNew |
NSKeyValueObservingOptionOld)
context:NULL];

然后您应该实现以下方法:

- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([keyPath isEqualToString:@"myLocation"]) {
// NSLog(@"My position changed");
}
}

然后您可以安全地访问 self.mapView.myLocation.coordinate,因为您知道该位置是有效的。

当 mapview 被释放时,不要忘记将自己作为观察者移除:

[self.mapView removeObserver:self forKeyPath:@"myLocation"];

正如 Saxon 已经提到的, map View 将显示它自己的当前位置指示器。您添加的标记将另外显示,但是当您创建标记时 mapview 可能还没有有效位置,因此它被添加到中间的纬度/经度 0,0海洋的。

关于ios - 在谷歌地图上显示当前位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23816141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com