为当前位置自定义谷歌地图蓝点

Posted

技术标签:

【中文标题】为当前位置自定义谷歌地图蓝点【英文标题】:Customize Google Maps blue dot for current location 【发布时间】:2013-08-22 06:29:06 【问题描述】:

我使用的是 2013 版的 ios 版 Google Maps SDK。我想为当前位置自定义默认蓝点,并使用另一个图标或周围的脉动圆圈。

我知道我们可以在 MKMapView 中使用 mapView:viewForAnnotation: 做到这一点,但我不知道如何使用 Google 地图做到这一点。

【问题讨论】:

【参考方案1】:

当前版本的 SDK (1.4.3) 无法执行此操作,实际上此请求存在一个未解决的问题:Look here。

作为一种解决方法,您可以使用以下方法隐藏默认按钮:

 _map.myLocationEnabled = NO;

然后创建一个自定义GMSMarker

 GMSMarker *pointMarker = [GMSMarker markerWithPosition:currentPosition];
 pointMarker.icon = [UIImage imageNamed:@"YourImage"];
 pointMarker.map = _map;

并使用CLLocationManager 更改它的位置,因此它始终显示当前位置。这有点棘手,但我认为这是实现这一目标的唯一方法。如果您需要更完整的示例,请告诉我。

【讨论】:

是的,我试过了,但它在用户当前位置周围显示了多个标记。请给出更详细的代码。 对不起,我已经很久没有使用Gmaps了,我不确定这个答案是否仍然有效。无论如何,如果您有问题,请提出一个新问题,我无法帮助您解决修改旧答案的问题。 感谢您的回答。这对我帮助很大。【参考方案2】:

对于 Swift 4.0

当您设置 GMSMapView 时:

mapView.isMyLocationEnabled = false

当用户位置更新时:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 

    let userLocationMarker = GMSMarker(position: location.coordinate)
    userLocationMarker.icon = UIImage(named: "yourImageName")
    userLocationMarker.map = mapView   

【讨论】:

【参考方案3】:

斯威夫特 4

class MasterMapViewController: UIViewController, CLLocationManagerDelegate, GMSMapViewDelegate 

    let currentLocationMarker = GMSMarker()

    override func viewDidLoad() 
        super.viewDidLoad()
        addCurrentLocationMarker()
    

    func addCurrentLocationMarker() 

        let currentLocationMarkerView = UIView()
        currentLocationMarkerView.frame.size = CGSize(width: 40, height: 40)
        currentLocationMarkerView.layer.cornerRadius = 40 / 4
        currentLocationMarkerView.clipsToBounds = true
        let currentLocationMarkerImageView = UIImageView(frame: currentLocationMarkerView.bounds)
        currentLocationMarkerImageView.contentMode = .scaleAspectFill
        currentLocationMarkerImageView.image = UIImage(named: "masterAvatar")
        currentLocationMarkerView.addSubview(currentLocationMarkerImageView)
        currentLocationMarker.iconView = currentLocationMarkerView
        currentLocationMarker.isTappable = false
        currentLocationMarker.map = mapView

    

    // location manager delegate
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 

        let lastLocation = locations.last!
        currentLocationMarker.position =  lastLocation.coordinate    
    


仅以此作为起点!这不是一个有吸引力的替代方案,因为不断更新标记在地图上的位置会影响性能。如果您要走这条路线,请找到一种方法,不要不断地从位置管理器代理那里更新标记的位置。

【讨论】:

currentLocationMarker?.icon = UIImage(named: "driver_circle")!.withAlignmentRectInsets(UIEdgeInsets(top: 0, left: 0, bottom: UIImage(named: "driver_circle")!.size.height /2,右:0)) 我花了几天时间才理解的快速修复!

以上是关于为当前位置自定义谷歌地图蓝点的主要内容,如果未能解决你的问题,请参考以下文章

更改谷歌地图当前位置蓝点颜色 iOS

在IOS中检索谷歌地图当前位置时隐藏蓝点

使用集群自定义谷歌地图上的标记

如何在 Flutter 中自定义谷歌地图标记图标

swift ios中的自定义谷歌地图标记图标图像

iOS Google 地图 SDK - 可以将当前位置蓝点标记为红点