2016-10-11 88 views
1

當用戶點擊的覆蓋,下面的代碼被觸發:獲取LAT和LONG

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


    } 

我懷疑我們是否可以提取具有覆蓋的精確的緯度和經度座標被挖掘?

謝謝!

+0

查看我的回答 –

回答

0

如果您只是希望獲得精確的座標,無論您是否在Overlay上進行挖掘,那麼還有另一個GMSMapViewDelegate的代理,每當我們點擊GoogleMaps時都會調用該代理。在這個代表中,您可以獲得您在地圖上點擊的確切座標,而無需在疊加層上進行點擊。

雨燕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 

更多信息參見here

+0

我在地圖上繪製了一條多段線,我需要把它打開。所以我需要'overlay.isTappable = true'。 –

+0

@JaysonTamayo我想''GoogleMapsSDK'中沒有方法可以給你攻絲疊加的確切座標。你只能接收到一個你點擊一個疊加層的事件,但不會在點擊疊加層時獲得座標,因爲'GMSOverlay'類沒有座標選項。 –

+0

應該有另一種方式。有沒有可能有'didTapAt'同時也聽重疊點擊? –

0

爲了解決這個問題,我們需要的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包含在任何PolylinePolygon我們之前已經確定,所以我們fireoverlay事件didTap overlay

確保創建polylinespolygonsisTappable = false

而但考慮到這一事件會爲每overlay竊聽即使如果他們是overlaped,你可以把returnif成功拿被解僱第一個overlay只有