Получите 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
а также polygons
isTappable = 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
Для справки смотрите здесь