Настройте синюю точку Google Maps для текущего местоположения

Я использую версию SDK Google Maps 2013 года для iOS. Я хотел бы настроить синюю точку по умолчанию для текущего местоположения с другим значком или пульсирующими кругами вокруг.

Я знаю, что мы можем сделать это с mapView:viewForAnnotation: в MKMapView, но я не знаю, как это сделать с помощью Google Maps.


person Nicolas Roy    schedule 20.08.2013    source источник


Ответы (3)


Невозможно сделать это с текущей версией SDK (1.4.3), и на самом деле существует открытая проблема с этим запросом: Посмотрите здесь.

Чтобы обойти эту проблему, вы можете скрыть кнопку по умолчанию с помощью:

 _map.myLocationEnabled = NO;

Затем создайте собственный GMSMarker

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

И измените его положение с помощью CLLocationManager, чтобы он всегда отображал текущую позицию. Это немного сложно, но я думаю, это единственный способ добиться этого. Если вам нужен более полный пример, дайте мне знать.

person JP Illanes    schedule 22.08.2013
comment
Да, я пробовал, но он отображает более одного маркера вокруг текущего местоположения пользователя. Пожалуйста, дайте более подробный код. - person G.Abhisek; 18.01.2016
comment
Извините, я давно не использую Gmaps, я не уверен, что этот ответ все еще актуален. В любом случае, если у вас есть проблема, задайте новый вопрос, я не могу помочь вам с вашей проблемой, изменив старый ответ. - person JP Illanes; 18.01.2016
comment
Спасибо за Ваш ответ. Это мне очень помогает. - person Mihir Oza; 28.01.2016

Swift 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    
    }

}

Используйте это только как отправную точку! Это не очень привлекательная альтернатива, потому что постоянное обновление положения маркера на карте снижает производительность. Если вы пошли по этому маршруту, найдите способ не обновлять постоянно положение маркера от делегата менеджера местоположения.

person liquid    schedule 24.12.2017
comment
currentLocationMarker? .icon = UIImage (named: driver_circle) !. withAlignmentRectInsets (UIEdgeInsets (top: 0, left: 0, bottom: UIImage (named: driver_circle) !. size.height / 2, right: 0)) Быстрое исправление, которое мне потребовалось несколько дней, чтобы понять! - person shanezzar; 24.12.2018

Для 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   
}
person George Leonidas    schedule 14.11.2018