Page Summary
-
This code demonstrates reverse geocoding, converting coordinates to a human-readable address when a user long-presses a location on a Google Map.
-
Upon a long press, a marker with an info window displaying the address is placed on the map at the specified coordinates.
-
To run the code, you need to configure your development environment with the Maps SDK for iOS and obtain a Google Maps API key.
-
The sample app provides various demos showcasing different features of the Maps SDK for iOS, accessible after building and running the project.
When the map is long pressed, the coordinates of the gesture are sent to the reverse geocoding service. If successful, a marker with an info window containing the result is added to the map.
Get started
Before you can try the sample code, you must configure your development environment. For more information, see Maps SDK for iOS code samples .
View the code
Swift
import GoogleMaps import UIKit // Sample code for GeoCoder service. class GeocoderViewController : 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 GeocoderViewController : 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 guard let lines = address . lines , let title = lines . first else { return } marker . title = title if lines . count > 1 { marker . snippet = lines [ 1 ] } } } }
Objective-C
#import "GoogleMapsDemos/Samples/GeocoderViewController.h" #import <GoogleMaps/GoogleMaps.h> @implementation GeocoderViewController { GMSMapView * _mapView ; GMSGeocoder * _geocoder ; } - ( void ) viewDidLoad { [ super viewDidLoad ]; GMSCameraPosition * camera = [ GMSCameraPosition cameraWithLatitude : -33.868 longitude : 151.2086 zoom : 12 ]; _mapView = [ GMSMapView mapWithFrame : CGRectZero camera : camera ]; _mapView . delegate = self ; _geocoder = [[ GMSGeocoder alloc ] init ]; self . view = _mapView ; } - ( void ) mapView: ( GMSMapView * ) mapView didLongPressAtCoordinate: ( CLLocationCoordinate2D ) coordinate { // On a long press, reverse geocode this location. __weak __typeof__ ( self ) weakSelf = self ; GMSReverseGeocodeCallback handler = ^ ( GMSReverseGeocodeResponse * response , NSError * error ) { [ weakSelf handleResponse : response coordinate : coordinate error : error ]; }; [ _geocoder reverseGeocodeCoordinate : coordinate completionHandler : handler ]; } - ( void ) handleResponse: ( nullable GMSReverseGeocodeResponse * ) response coordinate :( CLLocationCoordinate2D ) coordinate error :( nullable NSError * ) error { GMSAddress * address = response . firstResult ; if ( address ) { NSLog ( @"Geocoder result: %@" , address ); GMSMarker * marker = [ GMSMarker markerWithPosition : address . coordinate ]; NSArray<NSString * > * lines = [ address lines ]; marker . title = [ lines firstObject ]; if ( lines . count > 1 ) { marker . snippet = [ lines objectAtIndex : 1 ]; } marker . appearAnimation = kGMSMarkerAnimationPop ; marker . map = _mapView ; } else { NSLog ( @"Could not reverse geocode point (%f,%f): %@" , coordinate . latitude , coordinate . longitude , error ); } } @ end . m

