2017-06-24 14 views
1

私はフルスクリーンの地図を表示したいです.View、常にmapViewの中心の緯度と経度を取得し、この時点でマーカーを表示します。Google Mapの緯度と経度の中心を取得

func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) { 

    let lat = mapView.camera.target.latitude 
    print(lat) 

    let lon = mapView.camera.target.longitude 
    print(lon) 


    marker.position = CLLocationCoordinate2DMake(CLLocationDegrees(centerPoint.x) , CLLocationDegrees(centerPoint.y)) 
    marker.map = self.mapView 
    returnPostionOfMapView(mapView: mapView) 

    } 

    func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) { 
    print("idleAt") 

    //called when the map is idle 

    returnPostionOfMapView(mapView: mapView) 

    } 

    func returnPostionOfMapView(mapView:GMSMapView){ 
    let geocoder = GMSGeocoder() 
    let latitute = mapView.camera.target.latitude 
    let longitude = mapView.camera.target.longitude 




    let position = CLLocationCoordinate2DMake(latitute, longitude) 
    geocoder.reverseGeocodeCoordinate(position) { response , error in 
     if error != nil { 
     print("GMSReverseGeocode Error: \(String(describing: error?.localizedDescription))") 
     }else { 
     let result = response?.results()?.first 
     let address = result?.lines?.reduce("") { $0 == "" ? $1 : $0 + ", " + $1 } 

     print(address) 
//  self.searchBar.text = address 
     } 
    } 
    } 

iがreturnPostionOfMapView方法に戻り緯度と経度がこの位置に中心のMapViewと表示マーカの位置を知っていることができる方法でこのコードを使用しますか?

答えて

4

Googleマップのfunc mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition)代理人を使用して地図の中心を取得するのは正しいことです。

センターのための変数を取る中心位置を知るために、このデリゲートを実装

var centerMapCoordinate:CLLocationCoordinate2D! 

を調整します。

func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) { 
    let latitude = mapView.camera.target.latitude 
    let longitude = mapView.camera.target.longitude 
    centerMapCoordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 
    self.placeMarkerOnCenter(centerMapCoordinate:centerMapCoordinate) 
} 

機能を使用すると、マーカーの多くを得るだろう。この場合、中心点

func placeMarkerOnCenter(centerMapCoordinate:CLLocationCoordinate2D) { 
    let marker = GMSMarker() 
    marker.position = centerMapCoordinate 
    marker.map = self.mapView 
} 

上のマーカーを配置します。したがって、マーカーをグローバルに保持し、マーカーが既に存在するかどうかを確認してください。位置を変更するだけです。

var marker:GMSMarker! 

func placeMarkerOnCenter(centerMapCoordinate:CLLocationCoordinate2D) { 
    if marker == nil { 
     marker = GMSMarker() 
    } 
    marker.position = centerMapCoordinate 
    marker.map = self.mapView 
} 
関連する問題