Introducing Places UI Kit: A ready-to-use, low-cost component library that lets you bring the familiar Google Maps UI for Places to any map of your choice. Try it out, andshare your input to help shape the future of GMP!

Geocoding Service

Note: Server-side libraries

This page describes the client-side service available with the Maps JavaScript API. If you want to work with Google Maps web services on your server, take a look at theNode.js Client for Google Maps Services. The page at that link also introduces the Java Client, Python Client and Go Client for Google Maps Services.

European Economic Area (EEA) developers If your billing address is in the European Economic Area, effective on 8 July 2025, the Google Maps Platform EEA Terms of Service will apply to your use of the Services. Functionality varies by region.Learn more.

Overview

Also see the Maps JavaScript API Reference:Geocoder

Geocoding is the process of converting addresses (like "1600 Amphitheatre Parkway, Mountain View, CA") into geographic coordinates (like latitude 37.423021 and longitude -122.083739), which you can use to place markers or position the map.

Reverse geocoding is the process of converting geographic coordinates into a human-readable address (seeReverse geocoding (Address Lookup)).

You can also use the geocoder to find the address for a givenplace ID.

The Maps JavaScript API provides aGeocoder class for geocoding and reverse geocoding dynamically from user input. If instead you want to geocode static, known addresses, see theGeocoding web service.

Get started

Before using the Geocoding service in the Maps JavaScript API, first ensure that the Geocoding API is enabled in the Google Cloud console, in the same project you set up for the Maps JavaScript API.

To view your list of enabled APIs:

  1. Go to theGoogle Cloud console.
  2. Click theSelect a project button, then select the same project you set up for the Maps JavaScript API and clickOpen.
  3. From the list of APIs on theDashboard, look forGeocoding API.
  4. If you see the API in the list, you're all set. If the API isnot listed, enable it:
    1. At the top of the page, selectENABLE API to display theLibrary tab. Alternatively, from the left side menu, selectLibrary.
    2. Search forGeocoding API, then select it from the results list.
    3. SelectENABLE. When the process finishes,Geocoding API appears in the list of APIs on theDashboard.

Pricing and policies

Pricing

To learn about pricing and usage policies for the JavaScript Geocoding service, seeUsage and Billingfor the Geocoding API.

Policies

Your use of the Geocoding service must be in accordance with thePolicies for Geocoding API.

Geocoding Requests

Accessing the Geocoding service is asynchronous, since the Google Maps API needs to make a call to an external server. For that reason, you need to pass acallback method to execute upon completion of the request. This callback method processes the result(s). Note that the geocoder may return more than one result.

You access the Google Maps API geocoding service within your code using thegoogle.maps.Geocoder constructor object. TheGeocoder.geocode() method initiates a request to the geocoding service, passing it aGeocoderRequest object literal containing the input terms and a callback method to execute upon receipt of the response.

TheGeocoderRequest object literal contains the following fields:

{address:string,location:LatLng,placeId:string,bounds:LatLngBounds,componentRestrictions:GeocoderComponentRestrictions,region:string}

Required parameters: You must supply one, and only one, of the following fields:

  • address — The address which you want to geocode.
        or
    location — TheLatLng (orLatLngLiteral) for which you want to obtain the closest, human-readable address. The geocoder performs areverse geocode. SeeReverse Geocoding for more information.
        or
    placeId — The place ID of the place for which you want to obtain the closest, human-readable address. See more aboutretrieving an address for a place ID.

Optional parameters:

  • bounds — TheLatLngBounds within which to bias geocode results more prominently. Thebounds parameter will only influence, not fully restrict, results from the geocoder. See more information aboutviewport biasing below.
  • componentRestrictions — Used to restrict results to a specific area. See more information aboutcomponent filtering below.
  • region — The region code, specified as a specified as a two-character (non-numeric) Unicode region subtag. In most cases, these tags map directly to familiar ccTLD ("top-level domain") two-character values. Theregion parameter will only influence, not fully restrict, results from the geocoder. See more information aboutregion code biasing below.
  • extraComputations — The only allowed value for this parameter isADDRESS_DESCRIPTORS. See address descriptors for more details.
  • fulfillOnZeroResults — Fulfill the promise on a ZERO_RESULT status in the response. This may be desired because even with zero geocoding results there may still be additional response level fields returned. See Fulfill on Zero Results for more details.

Geocoding Responses

The Geocoding service requires a callback method to execute upon retrieval of the geocoder's results. This callback should pass two parameters to hold theresults and astatus code, in that order.

Note: The Geocoding response also containsplus_code andaddress_descriptor fields at the response level, but these are not accessible through theaddress_descriptor fields at the response level, but these are not accessible through the callback. Instead, they should be accessed through the promise. See Fulfill on Zero Results for more details.

Geocoding Results

TheGeocoderResult object represents a single geocoding result. A geocode request may return multiple result objects:

results[]:{types[]:string,formatted_address:string,address_components[]:{short_name:string,long_name:string,postcode_localities[]:string,types[]:string},partial_match:boolean,place_id:string,postcode_localities[]:string,geometry:{location:LatLng,location_type:GeocoderLocationTypeviewport:LatLngBounds,bounds:LatLngBounds}}

These fields are explained below:

  • types[] is an array indicating theaddress type of the returned result. This array contains a set of zero or more tags identifying the type of feature returned in the result. For example, a geocode of "Chicago" returns "locality" which indicates that "Chicago" is a city, and also returns "political" which indicates it is a political entity. See more information aboutaddress types and address component types below.
  • formatted_address is a string containing the human-readable address of this location.

    Often this address is equivalent to the postal address. Note that some countries, such as the United Kingdom, do not allow distribution of true postal addresses due to licensing restrictions.

    The formatted address is logically composed of one or moreaddress components. For example, the address "111 8th Avenue, New York, NY" consists of the following components: "111" (the street number), "8th Avenue" (the route), "New York" (the city) and "NY" (the US state).

    Do not parse the formatted address programmatically. Instead you should use the individual address components, which the API response includes in addition to the formatted address field.

  • address_components[] is an array containing the separate components applicable to this address.

    Each address component typically contains the following fields:

    • types[] is an array indicating thetype of the address component. See the list ofsupported types.
    • long_name is the full text description or name of the address component as returned by the Geocoder.
    • short_name is an abbreviated textual name for the address component, if available. For example, an address component for the state of Alaska may have along_name of "Alaska" and ashort_name of "AK" using the 2-letter postal abbreviation.

    Note the following facts about theaddress_components[] array:

    • The array of address components may contain more components than theformatted_address.
    • The array does not necessarily include all the political entities that contain an address, apart from those included in theformatted_address. To retrieve all the political entities that contain a specific address, you should use reverse geocoding, passing the latitude/longitude of the address as a parameter to the request.
    • The format of the response is not guaranteed to remain the same between requests. In particular, the number ofaddress_components varies based on the address requested and can change over time for the same address. A component can change position in the array. The type of the component can change. A particular component may be missing in a later response.

    See more information aboutaddress types and address component types below.

  • partial_match indicates that the geocoder did not returnan exact match for the original request, though it was able to match part ofthe requested address. You may wish to examine the original request for misspellings and/oran incomplete address.

    Partial matches most often occur for street addresses that do not existwithin the locality you pass in the request. Partial matches may also bereturned when a request matches two or more locations in the same locality.For example, "Hillpar St, Bristol, UK" will return a partial match for bothHenry Street and Henrietta Street. Note that if a request includes amisspelled address component, the geocoding service may suggest an alternativeaddress. Suggestions triggered in this way will also be marked as a partialmatch.

  • place_idis a unique identifier of a place, which can be used with other Google APIs. For example, you can use theplace_id with theGoogle Places API library to get details of a local business, such as phone number, opening hours, user reviews, and more. See theplace ID overview.
  • postcode_localities[] is an array denoting all the localities contained in a postal code, and is only present when the result is a postal code that contains multiple localities.
  • geometry contains the following information:

    • location contains the geocoded latitude,longitude value. Note that we return this location as aLatLng object, not as a formatted string.
    • location_type stores additional data about the specified location. The following values are supported:
      • ROOFTOP indicates that the returned result reflects a precise geocode.
      • RANGE_INTERPOLATED indicates that the returned result reflects an approximation (usually on a road) interpolated between two precise points (such as intersections). Interpolated results are generally returned when rooftop geocodes are unavailable for a street address.
      • GEOMETRIC_CENTER indicates that the returned result is the geometric center of a result such as a polyline (for example, a street) or polygon (region).
      • APPROXIMATE indicates that the returned result is approximate.

    • viewport stores the recommended viewport for the returned result.
    • bounds (optionally returned) stores theLatLngBounds which can fully contain the returned result. Note that these bounds may not match the recommended viewport. (For example, San Francisco includes theFarallon Islands, which are technically part of the city, but shouldn't be returned in the viewport.)

Addresses are returned by the Geocoder using the browser's preferred language setting, or the language specified when loading the API JavaScript using thelanguage parameter. (For more information, see Localization.)

Address types and address component types

Thetypes[] array in theGeocoderResult in the response indicates theaddress type. Examples of address types include a street address, a country, or a political entity. Thetypes array in theGeocoderAddressComponent indicates the type of each part of the address. Examples include street number or country.

Addresses may have multiple types. The types may be considered 'tags'. For example, many cities are tagged with thepolitical andlocality types.

The following types are supported and returned in both the address type and address component type arrays:

Address TypeDescription
street_addressA precise street address.
routeA named route (such as "US 101").
intersectionA major intersection, usually of two major roads.
politicalA political entity. Usually, this type indicates a polygon of some civil administration.
countryThe national political entity, and is typically the highest order type returned by the Geocoder.
administrative_area_level_1A first-order civil entity below the country level. Within the United States, these administrative levels are states. Not all nations exhibit these administrative levels. In most cases,administrative_area_level_1 short names will closely match ISO 3166-2 subdivisions and other widely circulated lists; however this is not guaranteed as our geocoding results are based on a variety of signals and location data.
administrative_area_level_2A second-order civil entity below the country level. Within the United States, these administrative levels are counties. Not all nations exhibit these administrative levels.
administrative_area_level_3A third-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.
administrative_area_level_4A fourth-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.
administrative_area_level_5A fifth-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.
administrative_area_level_6A sixth-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.
administrative_area_level_7A seventh-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.
colloquial_areaA commonly-used alternative name for the entity.
localityAn incorporated city or town political entity.
sublocalityA first-order civil entity below a locality. For some locations may receive one of the additional types:sublocality_level_1 tosublocality_level_5. Each sublocality level is a civil entity. Larger numbers indicate a smaller geographic area.
neighborhoodA named neighborhood.
premiseA named location, usually a building or collection of buildings with a common name.
subpremiseAn addressable entity below the premise level, such as an apartment, unit, or suite.
plus_codeAn encoded location reference, derived from latitude and longitude. Plus codes can be used as a replacement for street addresses in places where they do not exist (where buildings are not numbered or streets are not named). Seehttps://plus.codes for details.
postal_codeA postal code as used to address postal mail within the country.
natural_featureA prominent natural feature.
airportAn airport.
parkA named park.
point_of_interestA named point of interest. Typically, these "POI"s are prominent local entities that don't easily fit in another category, such as "Empire State Building" or "Eiffel Tower".

An empty list of types indicates there are no known types for the particular address component (for example, Lieu-dit in France).

In addition to the above, address components may include the types below.

Note: This list is not exhaustive, and is subject to change.

In addition to the above, address components may include the types listed below.

Note: This list is not exhaustive, and is subject to change.
Address Component TypeDescription
floorThe floor of a building address.
establishmentTypically a place that has not yet been categorized.
landmarkA nearby place that is used as a reference, to aid navigation.
point_of_interestA named point of interest.
parkingA parking lot or parking structure.
post_boxA specific postal box.
postal_townA grouping of geographic areas, such aslocality andsublocality, used for mailing addresses in some countries.
roomThe room of a building address.
street_numberThe precise street number.
bus_station,train_station andtransit_stationThe location of a bus, train or public transit stop.

Status Codes

Thestatus code may return one of the following values:

  • "OK" indicates that no errors occurred; the address was successfully parsed and atleast one geocode was returned.
  • "ZERO_RESULTS" indicates that the geocode was successful but returned no results.This may occur if the geocoder was passed a non-existentaddress.
  • "OVER_QUERY_LIMIT" indicates that you are over your quota.
  • "REQUEST_DENIED" indicates that your request was denied. The web page is not allowed to use the geocoder.
  • "INVALID_REQUEST" generally indicates that the query (address,components orlatlng) is missing.
  • "UNKNOWN_ERROR" indicates that the request couldn't be processed due to a server error. The request may succeed if you try again.
  • "ERROR" indicates that the request timed out or there was a problem contacting the Google servers. The request may succeed if you try again.

In this example, we geocode an address and place a marker at the returned latitude and longitude values. Note that the handler is passed as an anonymous function literal.

vargeocoder;varmap;functioninitialize(){geocoder=newgoogle.maps.Geocoder();varlatlng=newgoogle.maps.LatLng(-34.397,150.644);varmapOptions={zoom:8,center:latlng}map=newgoogle.maps.Map(document.getElementById('map'),mapOptions);}functioncodeAddress(){varaddress=document.getElementById('address').value;geocoder.geocode({'address':address},function(results,status){if(status=='OK'){map.setCenter(results[0].geometry.location);varmarker=newgoogle.maps.Marker({map:map,position:results[0].geometry.location});}else{alert('Geocode was not successful for the following reason: '+status);}});}<bodyonload="initialize()"><divid="map"style="width: 320px; height: 480px;"></div><div><inputid="address"type="textbox"value="Sydney, NSW"><inputtype="button"value="Encode"onclick="codeAddress()"></div></body>

View example.

Viewport Biasing

You can instruct the Geocoding Service to prefer results within a given viewport (expressed as a bounding box). You do so by setting thebounds parameter within theGeocoderRequest object literal to define the bounds of this viewport. Note that biasing onlyprefers results within the bounds; if more relevant results exist outside of these bounds, they may be included.

For example, a geocode for "Winnetka" generally returns this suburb of Chicago:

{"types":["locality","political"],"formatted_address":"Winnetka, IL, USA","address_components":[{"long_name":"Winnetka","short_name":"Winnetka","types":["locality","political"]},{"long_name":"Illinois","short_name":"IL","types":["administrative_area_level_1","political"]},{"long_name":"United States","short_name":"US","types":["country","political"]}],"geometry":{"location":[-87.7417070,42.1083080],"location_type":"APPROXIMATE"},"place_id":"ChIJW8Va5TnED4gRY91Ng47qy3Q"}

However, specifying abounds parameter defining a bounding box for the San Fernando Valley of Los Angeles results in this geocode returning the neighborhood named "Winnetka" in that location:

{"types":["sublocality","political"],"formatted_address":"Winnetka, California, USA","address_components":[{"long_name":"Winnetka","short_name":"Winnetka","types":["sublocality","political"]},{"long_name":"Los Angeles","short_name":"Los Angeles","types":["administrative_area_level_3","political"]},{"long_name":"Los Angeles","short_name":"Los Angeles","types":["administrative_area_level_2","political"]},{"long_name":"California","short_name":"CA","types":["administrative_area_level_1","political"]},{"long_name":"United States","short_name":"US","types":["country","political"]}],"geometry":{"location":[34.213171,-118.571022],"location_type":"APPROXIMATE"},"place_id":"ChIJ0fd4S_KbwoAR2hRDrsr3HmQ"}

Region Code Biasing

You can set the Geocoding Service to return results biased to a particular region explicitly using theregion parameter. This parameter takes a region code, specified as a two-character (non-numeric) Unicode region subtag. These tags map directly to familiar ccTLD ("top-level domain") two-character values such as "uk" in "co.uk" for example. In some cases, theregion tag also supports ISO-3166-1 codes, which sometimes differ from ccTLD values ("GB" for "Great Britain" for example).

When using theregion parameter:

  • Specify only one country or region. Multiple values are ignored, and could result in a failed request.
  • Use only two-character region subtags (Unicode CLDR format). All other inputs will result in errors.
  • Only the countries and regions listed inGoogle Maps Platform Coverage Details are supported.

Geocoding requests can be sent for every domain in which the main Google Maps application offers geocoding. Note that biasing onlyprefers results for a specific domain; if more relevant results exist outside of this domain, they may be included.

For example, a geocode for "Toledo" returns this result, as the default domain for the Geocoding Service is set to the United States:

{"types":["locality","political"],"formatted_address":"Toledo, OH, USA","address_components":[{"long_name":"Toledo","short_name":"Toledo","types":["locality","political"]},{"long_name":"Ohio","short_name":"OH","types":["administrative_area_level_1","political"]},{"long_name":"United States","short_name":"US","types":["country","political"]}],"place_id":"ChIJeU4e_C2HO4gRRcM6RZ_IPHw"}

A geocode for "Toledo" with theregion field set to'es' (Spain) will return the Spanish city:

{"types":["locality","political"],"formatted_address":"Toledo, España","address_components":[{"long_name":"Toledo","short_name":"Toledo","types":["locality","political"]},{"long_name":"Toledo","short_name":"TO","types":["administrative_area_level_2","political"]},{"long_name":"Castilla-La Mancha","short_name":"CM","types":["administrative_area_level_1","political"]},{"long_name":"España","short_name":"ES","types":["country","political"]}],"place_id":"ChIJ8f21C60Lag0R_q11auhbf8Y"}

Component Filtering

You can set the Geocoding Service to return address results restricted to a specific area, by using a components filter. Specify the filter in thecomponentRestrictions parameter. Filter values support the same methods of spelling correction and partial matching as other geocoding requests.

The geocoder returns only the results that matchall the component filters. That is, it evaluates the filter specifications as an AND, not an OR.

A components filter consists of one or more of the following items:

  • route matches long or short name of a route.
  • locality matches against locality and sublocality types.
  • administrativeArea matches all the levels of administrative area.
  • postalCode matches postal codes and postal code prefixes.
  • country matches a country name or a two letterISO 3166-1 country code.Note: The API follows the ISO standard for defining countries, and the filtering works best when using the corresponding ISO code of the country.

The following example demonstrates using thecomponentRestrictions parameter to filter bycountry andpostalCode:

functioncodeAddress(){geocoder.geocode({componentRestrictions:{country:'AU',postalCode:'2000'}},function(results,status){if(status=='OK'){map.setCenter(results[0].geometry.location);varmarker=newgoogle.maps.Marker({map:map,position:results[0].geometry.location});}else{window.alert('Geocode was not successful for the following reason: '+status);}});}

Fulfill on Zero Results

For reverse geocoding, by default the promise is broken onstatus=ZERO_RESULTS. However, the additional response level fields ofplus_code andaddress_descriptor may still bepopulated in this case. If true is provided for thefulfillOnZeroResults parameter,populated in this case. If true is provided for thefulfillOnZeroResults parameter,the promise is not broken and these additional fields are accessible from the promise if present.

The following is an example of this behavior for a latitude/longitude in Antarctica. Even though there are no reverse geocoding results, we can still print the plus code in the promise if we setfulfillOnZeroResults=true.

functionaddressDescriptorReverseGeocoding(){varlatlng=newgoogle.maps.LatLng(-75.290330,38.653861);geocoder.geocode({'location':latlng,'fulfillOnZeroResults':true,}).then((response)=>{console.log(response.plus_code);}).catch((error)=>{window.alert(`Error`);});}

Address Descriptors

Address descriptors include additional information that help describe a location using landmarks and areas. Check out theaddress descriptors demo to explore the feature.

Address descriptors can be enabled through the use of theextraComputations parameter. Includeextra_computations=ADDRESS_DESCRIPTORS in ageocoding request ,reverse geocoding request , or aplaces geocoding request to receive address descriptors in your response.

Example in places geocoding

The following query contains the address of a place in Delhi.

functionaddressDescriptorPlaceIdLookup(){geocoder.geocode({geocoder.geocode({'placeId':'ChIJyxAX8Bj9DDkRgBfAnBYa66Q','extraComputations':['ADDRESS_DESCRIPTORS']},function(results,status){if(status=='OK'){console.log(results[0].address_descriptor);}else{window.alert('Geocode was not successful for the following reason: '+status);}});}
Note: Not all places are compatible with address descriptors. Very large places (for example, an airport) or areas (for example, a postal region) will never receive an address descriptor.

Example in reverse geocoding

The following query contains the latitude/longitude value for a location in Delhi.

functionaddressDescriptorReverseGeocoding(){varlatlng=newgoogle.maps.LatLng(28.640964,77.235875);geocoder.geocode({'location':latlng,'extraComputations':["ADDRESS_DESCRIPTORS"],}).then((response)=>{console.log(response.address_descriptor);}).catch((error)=>{window.alert(`Error`);});}
Note: Reverse geocoding includes a single address descriptor at the response level. Geocoding and places geocoding will receive an address descriptor for each compatible result in the response

Address Descriptor Example

An exampleaddress_descriptor is as follows.

{"address_descriptor":{"areas":[{"containment":"OUTSKIRTS","display_name":{"language_code":"en","text":"Turkman Gate"},"place_id":"ChIJ_7LLvyb9DDkRMKKxP9YyXgs"},{"containment":"OUTSKIRTS","display_name":{"language_code":"en","text":"Chandni Chowk"},"place_id":"ChIJWcXciBr9DDkRUb4dCDykTwI"},{"containment":"NEAR","display_name":{"language_code":"en","text":"Katar Ganj"},"place_id":"ChIJH3cWUyH9DDkRaw-9CjvcRvY"}],"landmarks":[{"display_name":{"language_code":"en","text":"Delite Cinema"},"straight_line_distance_meters":29.9306755065918,"place_id":"ChIJLfiYDCT9DDkROoEa7NdupUM","travel_distance_meters":418.7794799804688,"spatial_relationship":"ACROSS_THE_ROAD","types":["establishment","movie_theater","point_of_interest"]},{"display_name":{"language_code":"en","text":"YES Bank"},"straight_line_distance_meters":66.83731079101562,"place_id":"ChIJFYHM3yb9DDkRRKGkZl2mpSQ","travel_distance_meters":489.0340270996094,"spatial_relationship":"DOWN_THE_ROAD","types":["bank","establishment","finance","point_of_interest"]},{"display_name":{"language_code":"en","text":"UCO Bank"},"straight_line_distance_meters":25.38849639892578,"place_id":"ChIJ-c6_wCb9DDkRjIk1LeqRtGM","travel_distance_meters":403.2246398925781,"spatial_relationship":"ACROSS_THE_ROAD","types":["atm","bank","establishment","finance","point_of_interest"]},{"display_name":{"language_code":"en","text":"Delhi By Cycle Meeting Point"},"straight_line_distance_meters":44.02867126464844,"place_id":"ChIJNxVfkSb9DDkRJD22l-eGFdM","travel_distance_meters":97.41281890869141,"spatial_relationship":"AROUND_THE_CORNER","types":["establishment","point_of_interest","tourist_attraction","travel_agency"]},{"display_name":{"language_code":"en","text":"Axis Bank Branch"},"straight_line_distance_meters":102.3495178222656,"place_id":"ChIJr3uaDCT9DDkR8roHTVSn1x4","travel_distance_meters":330.8566284179688,"spatial_relationship":"DOWN_THE_ROAD","types":["bank","establishment","finance","point_of_interest"]}]}}

There are two arrays in eachaddress_descriptor object:landmarks andareas. Thelandmarks array contains up to 5 results ranked in order of relevance by taking account of proximity to the requested coordinate, the prevalence of the landmark and its visibility. Each landmark result contains the following values:

  • place_id is the place ID of the landmarks result. See theplace ID overview.
  • display_name is the display name of the landmark and containslanguage_code andtext.
  • straight_line_distance_meters is the point to point distance in meters between the input coordinate and the landmarks result.
  • travel_distance_meters is the distance in meters as traveled using the road network (ignoring road restrictions) between the input coordinate and the landmarks result.
  • spatial_relationship is the estimated relationship between the input coordinate and the landmarks result:
    • "NEAR" is the default relationship when none of the following applies.
    • "WITHIN" when the input coordinate is contained within the bounds of the structure associated with the landmark.
    • "BESIDE" when the input coordinate is directly adjacent to the landmark or landmark's access point.
    • "ACROSS_THE_ROAD" when the input coordinate is directly opposite of the landmark on the other side of the route.
    • "DOWN_THE_ROAD" when the input coordinate is along the same route as the landmark, but not"BESIDES" or"ACROSS_THE_ROAD".
    • "AROUND_THE_CORNER" when the input coordinate is along a perpendicular route as the landmark (restricted to a single turn).
    • "BEHIND" when the input coordinate is spatially close to the landmark, but far from its access point.
  • types are thePlace types of the landmark.

Theareas object contains up to 3 responses and limits itself to places that represent small regions, such as neighborhoods, sublocalities, and large complexes. Areas that contain the requested coordinate are listed first and ordered from smallest to largest. Eachareas result contains the following values:

  • place_id is the place ID of the areas result. See theplace ID overview.
  • display_name is the display name of the area and containslanguage_code andtext.
  • containment is the estimated containment relationship between the input coordinate and the areas result:
    • "NEAR" is the default relationship when none of the following applies.
    • "WITHIN" when the input coordinate is close to the center of the area.
    • "OUTSKIRTS" when the input coordinate is close to the edge of the area.

Address Descriptor Coverage

Address descriptors are in GA for India. The use of address descriptors in India incurs no additional cost and usage is covered by the existingGeocoding (India) Essentials SKU.

Feedback

This feature is available in all regions. It is in GA for India and in the pre-GA Experimental launch stage for all other regions. We would appreciate feedback:

Reverse Geocoding (Address Lookup)

The termgeocoding generally refers to translating a human-readable address into a location on a map. The process of doing the converse, translating a location on the map into a human-readable address, is known asreverse geocoding.

Instead of supplying a textualaddress, supply a comma-separated latitude/longitude pair in thelocation parameter.

Note:If you include thecomponentRestrictionsparameter in the request then thelocation parameter is ignored.

The following example geocodes a latitude/longitude value and centers the map at that location, bringing up an info window with the formatted address:

TypeScript

functioninitMap():void{constmap=newgoogle.maps.Map(document.getElementById("map")asHTMLElement,{zoom:8,center:{lat:40.731,lng:-73.997},});constgeocoder=newgoogle.maps.Geocoder();constinfowindow=newgoogle.maps.InfoWindow();(document.getElementById("submit")asHTMLElement).addEventListener("click",()=>{geocodeLatLng(geocoder,map,infowindow);});}functiongeocodeLatLng(geocoder:google.maps.Geocoder,map:google.maps.Map,infowindow:google.maps.InfoWindow){constinput=(document.getElementById("latlng")asHTMLInputElement).value;constlatlngStr=input.split(",",2);constlatlng={lat:parseFloat(latlngStr[0]),lng:parseFloat(latlngStr[1]),};geocoder.geocode({location:latlng}).then((response)=>{if(response.results[0]){map.setZoom(11);constmarker=newgoogle.maps.Marker({position:latlng,map:map,});infowindow.setContent(response.results[0].formatted_address);infowindow.open(map,marker);}else{window.alert("No results found");}}).catch((e)=>window.alert("Geocoder failed due to: "+e));}declareglobal{interfaceWindow{initMap:()=>void;}}window.initMap=initMap;
Note: Read theguide on using TypeScript and Google Maps.

JavaScript

functioninitMap(){constmap=newgoogle.maps.Map(document.getElementById("map"),{zoom:8,center:{lat:40.731,lng:-73.997},});constgeocoder=newgoogle.maps.Geocoder();constinfowindow=newgoogle.maps.InfoWindow();document.getElementById("submit").addEventListener("click",()=>{geocodeLatLng(geocoder,map,infowindow);});}functiongeocodeLatLng(geocoder,map,infowindow){constinput=document.getElementById("latlng").value;constlatlngStr=input.split(",",2);constlatlng={lat:parseFloat(latlngStr[0]),lng:parseFloat(latlngStr[1]),};geocoder.geocode({location:latlng}).then((response)=>{if(response.results[0]){map.setZoom(11);constmarker=newgoogle.maps.Marker({position:latlng,map:map,});infowindow.setContent(response.results[0].formatted_address);infowindow.open(map,marker);}else{window.alert("No results found");}}).catch((e)=>window.alert("Geocoder failed due to: "+e));}window.initMap=initMap;
Note: The JavaScript is compiled from the TypeScript snippet.
View example

Try Sample

Note that in the previous example we showed the first result by selectingresults[0]. The reverse geocoder often returns more than one result. Geocoded addresses are not just postal addresses, but any way to geographically name a location. For example, when geocoding a point in the city of Chicago, the geocoded point may be labeled as a street address, as the city (Chicago), as its state (Illinois) or as a country (The United States). All are addresses to the geocoder. The reverse geocoder returns all of these results.

The reverse geocoder matches political entities (countries, provinces, cities and neighborhoods), street addresses, and postal codes.

Here's an example of the list of addresses that the above query may return:

results[0].formatted_address:"277 Bedford Ave, Brooklyn, NY 11211, USA"results[1].formatted_address:"Grand St/Bedford Av, Brooklyn, NY 11211, USA"results[2].formatted_address:"Williamsburg, Brooklyn, NY, USA"results[3].formatted_address:"Brooklyn, NY, USA"results[4].formatted_address:"New York, NY, USA"results[5].formatted_address:"Brooklyn, NY 11211, USA"results[6].formatted_address:"Kings County, NY, USA"results[7].formatted_address:"New York-Northern New Jersey-Long Island, NY-NJ-PA, USA"results[8].formatted_address:"New York Metropolitan Area, USA"results[9].formatted_address:"New York, USA"

Addresses are returned in the order of best to least matches. Generally, the more exact address is the most prominent result, as it is in this case. Note that we return different types of addresses, from the most specific street address to less specific political entities such as neighborhoods, cities, counties, states, etc. If you want to match a more general address, you may want to inspect theresults[].types field.

Note: Reverse geocoding is not an exact science. The geocoder will attempt to find the closest addressable location within a certain tolerance.

Retrieving an Address for a Place ID

Supply aplaceId to find the address for a given place ID. The place ID is a unique identifier that can be used with other Google APIs. For example, you can supply theplaceId returned by theRoads API to get the address for a snapped point. For more information about place IDs, see theplace ID overview.

When you supply aplaceId, the request cannot contain any of the following fields:

  • address
  • latLng
  • location
  • componentRestrictions

The following example accepts a place ID, finds the corresponding address, and centers the map at that location. It also brings up an info window showing the formatted address of the relevant place:

TypeScript

// Initialize the map.functioninitMap():void{constmap=newgoogle.maps.Map(document.getElementById("map")asHTMLElement,{zoom:8,center:{lat:40.72,lng:-73.96},});constgeocoder=newgoogle.maps.Geocoder();constinfowindow=newgoogle.maps.InfoWindow();(document.getElementById("submit")asHTMLElement).addEventListener("click",()=>{geocodePlaceId(geocoder,map,infowindow);});}// This function is called when the user clicks the UI button requesting// a geocode of a place ID.functiongeocodePlaceId(geocoder:google.maps.Geocoder,map:google.maps.Map,infowindow:google.maps.InfoWindow){constplaceId=(document.getElementById("place-id")asHTMLInputElement).value;geocoder.geocode({placeId:placeId}).then(({results})=>{if(results[0]){map.setZoom(11);map.setCenter(results[0].geometry.location);constmarker=newgoogle.maps.Marker({map,position:results[0].geometry.location,});infowindow.setContent(results[0].formatted_address);infowindow.open(map,marker);}else{window.alert("No results found");}}).catch((e)=>window.alert("Geocoder failed due to: "+e));}declareglobal{interfaceWindow{initMap:()=>void;}}window.initMap=initMap;
Note: Read theguide on using TypeScript and Google Maps.

JavaScript

// Initialize the map.functioninitMap(){constmap=newgoogle.maps.Map(document.getElementById("map"),{zoom:8,center:{lat:40.72,lng:-73.96},});constgeocoder=newgoogle.maps.Geocoder();constinfowindow=newgoogle.maps.InfoWindow();document.getElementById("submit").addEventListener("click",()=>{geocodePlaceId(geocoder,map,infowindow);});}// This function is called when the user clicks the UI button requesting// a geocode of a place ID.functiongeocodePlaceId(geocoder,map,infowindow){constplaceId=document.getElementById("place-id").value;geocoder.geocode({placeId:placeId}).then(({results})=>{if(results[0]){map.setZoom(11);map.setCenter(results[0].geometry.location);constmarker=newgoogle.maps.Marker({map,position:results[0].geometry.location,});infowindow.setContent(results[0].formatted_address);infowindow.open(map,marker);}else{window.alert("No results found");}}).catch((e)=>window.alert("Geocoder failed due to: "+e));}window.initMap=initMap;
Note: The JavaScript is compiled from the TypeScript snippet.
View example

Try Sample

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-07-18 UTC.