Получите LAT и LONG из наложенного изображения в Картах Google

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

func mapView(_ mapView: GMSMapView, didTap overlay: GMSOverlay) {


    }

Интересно, сможем ли мы извлечь точные LAT и LONG координаты наложенного изображения?

Спасибо!

3 ответа

Чтобы решить эту проблему, нам нужно вместе 2 метода, поэтому я объединил их таким образом, который, надеюсь, поможет в этом вопросе:

func mapView(_ mapView: GMSMapView, didTap overlay: GMSOverlay) {
    print(overlay)
}

func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
    print(coordinate)

    for polyline in polylines {
        if GMSGeometryIsLocationOnPath(coordinate, polyline.path!, true) {
            self.mapView(mapView, didTap: polyline)
        }
    }
    for polygon in polygons {
        if GMSGeometryContainsLocation(coordinate, polygon.path!, true) {
            self.mapView(mapView, didTap: polygon)
        }
    }
}

если пользователь нажал на coordinate мы разберемся с этим coordinate содержится в любом Polyline или же Polygon мы определили раньше, поэтому мы fire событие didTap overlay для этого overlay,

Не забудьте сделать polylines а также polygonsisTappable = false

И но в виду, это событие будет уволено для каждого overlay постучал, даже если они overlaped Можно поставить return когда if Успех, чтобы взять первый overlay только

Вы можете использовать метод делегата didTapAt для того же самого.

@wajih, для вас был вызван метод didTapAt, когда вы нажимаете на названия или названия ориентиров? Для меня это не называют. В моем случае заголовок ориентира находится над многоугольником, и метод didTapAt не вызывается, но если я установил для tappable значение true, тогда didTap (overlay) вызывается идеально.

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

Swift 3.0

 func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
        print(coordinate.latitude)
        print(coordinate.longitude)
    }

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

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
        print(marker.position.latitude)
        print(marker.position.longitude)
        return true
    }

Удостоверьтесь, что ваш оверлей сделан как неприступный.

overlay.isTappable = false

Для справки смотрите здесь

Другие вопросы по тегам