web-dev-qa-db-ja.com

Googleマップの緯度と経度の中心を取得します

全画面のmapViewを表示し、常にmapViewの中心の緯度と経度を取得し、このポイントにマーカーを表示したいと思います。

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
      }
    }
  }

このコードを使用して、returnPostionOfMapViewメソッドで返される緯度と経度が中央のmapViewの位置であり、この位置にマーカーを表示する方法を知ることができますか?

7
ava

あなたはグーグルマップの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
}
19