ilink-world/ios/Pods/GoogleMaps/SwiftExample/GoogleMapsSwiftDemos/Swift/Samples/StructuredGeocoderViewContr...

71 lines
2.3 KiB
Swift
Executable File

// Copyright 2020 Google LLC. All rights reserved.
//
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
// file except in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under
// the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
// ANY KIND, either express or implied. See the License for the specific language governing
// permissions and limitations under the License.
import GoogleMaps
import UIKit
// Sample code for GeoCoder service.
class StructuredGeocoderViewController: UIViewController {
private lazy var mapView: GMSMapView = {
let camera = GMSCameraPosition(latitude: -33.868, longitude: 151.2086, zoom: 12)
return GMSMapView(frame: .zero, camera: camera)
}()
private lazy var geocoder = GMSGeocoder()
override func loadView() {
view = mapView
mapView.delegate = self
}
}
extension StructuredGeocoderViewController: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, didLongPressAt coordinate: CLLocationCoordinate2D) {
// On a long press, reverse geocode this location.
geocoder.reverseGeocodeCoordinate(coordinate) { response, error in
guard let address = response?.firstResult() else {
let errorMessage = error.map { String(describing: $0) } ?? "<no error>"
print(
"""
Could not reverse geocode point (\(coordinate.latitude), \(coordinate.longitude)): \
\(errorMessage)
"""
)
return
}
print("Geocoder result: \(address)")
let marker = GMSMarker(position: address.coordinate)
marker.appearAnimation = .pop
marker.map = mapView
marker.title = address.thoroughfare
var snippet = ""
if let subLocality = address.subLocality {
snippet.append("subLocality: \(subLocality)\n")
}
if let locality = address.locality {
snippet.append("subLocality: \(locality)\n")
}
if let administrativeArea = address.administrativeArea {
snippet.append("administrativeArea: \(administrativeArea)\n")
}
if let country = address.country {
snippet.append("country: \(country)\n")
}
marker.snippet = snippet
}
}
}