Как перемещать маркер вместе с перемещением карты Google в iOS?

Я показываю маркер в определенном месте, а также показываю текущий адрес в адресной метке на Google Maps.

Теперь я хочу изменить местоположение, переместив карту Google, но проблема в том, что при перемещении карты я должен одновременно перемещать маркер вместе с картой и отображать адрес этого местоположения в адресной метке. .

Как я могу это сделать?

Я пробовал это:

let destinationMarker = GMSMarker(position: self.destinationLocation.coordinate)

let image = UIImage(named:"sourcemarker")
destinationMarker.icon = image
destinationMarker.draggable = true
destinationMarker.map = self.viewMap
//viewMap.selectedMarker = destinationMarker
destinationMarker.title = "hi"
destinationMarker.userData = "changedestination"

func mapView(mapView: GMSMapView, didEndDraggingMarker marker: GMSMarker)
{
    if marker.userData as! String == "changedestination"
    {
        self.destinationLocation = CLLocation(latitude: marker.position.latitude, longitude: marker.position.longitude)
        self.destinationCoordinate = self.destinationLocation.coordinate
        //getAddressFromLatLong(destinationCoordinate)
    }
}

person Shilpashree MC    schedule 23.06.2016    source источник


Ответы (4)


Обновление для Swift 4:

Сначала вам нужно соответствовать GMSMapViewDelegate:

extension MapsVC: GMSMapViewDelegate{

А затем установите свой VC в качестве делегата viewMap в viewDidLoad ()

viewMap.delegate = self

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

func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
    destinationMarker.position = position.target
    print(destinationMarker.position)
}
person Hugo Jordao    schedule 26.02.2018

Есть одна хитрость, которая может вам здесь помочь. Вместо того, чтобы использовать здесь GMSMarker, поместите изображение, указывающее на центр, поверх вашего Google MapView.

Вы можете легко найти координаты центра карты, используя это:

double latitude = mapView.camera.target.latitude;
double longitude = mapView.camera.target.longitude;

Или это

GMSCoordinateBounds *bounds = nil;
bounds = [[GMSCoordinateBounds alloc] initWithRegion: visibleRegion];

CLLocationCoordinate2D centre = CLLocationCoordinate2DMake(
                                                           (bounds.southWest.latitude + bounds.northEast.latitude) / 2,
                                                           (bounds.southWest.longitude + bounds.northEast.longitude) / 2);

Теперь вы можете получить адрес местоположения с помощью API геокодирования от Google.

Вот ссылка: https://developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_geocoder

Вы можете обновить адрес при вызове этого метода делегата:

- (void) mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position 

Надеюсь это поможет.

person Bharat    schedule 28.06.2016
comment
Ваш совет idleAtCameraPosition спасти мой день! - person Ragen Dazs; 19.02.2020

На основе примечаний к выпуску, сделанных в Maps SDK для IOS, изменение маркеров position заставит маркер переместиться в новое место.

Чтобы решить эту проблему, вы можете использовать новые функции для GMSMarker, как указано в Выпуск версии 1.5, например:

  • Маркеры можно сделать перетаскиваемыми с помощью свойства draggable, а в GMSMapViewDelegate были добавлены новые методы делегата перетаскивания. (Ошибка 4975).
  • Добавлен GMSMarkerLayer, собственный подкласс CALayer для GMSMarker, который поддерживает анимацию положения и поворота маркера. (Ошибки 4951, 5743).

В дополнение к этому, это сообщение в GitHub - GoogleMapsAnimationGlitch и это сообщение SO - Также может помочь плавное перемещение GMSMarker по координатам в Objective c.

person Teyam    schedule 24.06.2016
comment
@Teyam .. У меня небольшие сомнения. Я работаю с картами Google. при обновлении местоположения мой вид карты также анимируется. Пожалуйста, помогите мне. - person Uma Madhavi; 17.12.2016

person    schedule
comment
Привет, не могли бы вы рассказать мне об использовании mapGesture (если self.mapGesture == true). Я получаю сообщение об ошибке: - нет участника mapGesture - person Khushbu Desai; 29.08.2018