Геокодирование — это процесс преобразования адресов в географические координаты (широту и долготу), которые можно использовать для размещения маркеров на карте или позиционирования карты.
Google Maps Geocoding API обеспечивает прямой доступ к этим службам через HTTP-запрос.

Давайте создадим простую программу на Python, которая будет принимать адрес в качестве входных данных и выводить соответствующие координаты.

XML-запрос Google Maps Geocoding API имеет следующую форму:

https://maps.googleapis.com/maps/api/geocode/xml?address=ADDRESS

Здесь поле ADDRESS — это адрес, который мы даем в качестве входных данных. API также поддерживает формат JSON, но в нашем примере мы будем использовать XML.

Приступаем к кодированию. Во-первых, нам нужно импортировать библиотеки:
urllib.request позволяет открывать удаленные локации.
urllib.parse заботится о правильной кодировке (UTF-8)
xml.etree обрабатывает XML-данные.

from urllib.request import urlopen as OPEN 
from urllib.parse import urlencode as ENCODE 
from xml.etree import ElementTree as XML 

api_url = 'http://maps.googleapis.com/maps/api/geocode/xml?'


Далее нам нужно принять пользовательский ввод, добавить в api_url:

address = input('Enter address: ') 
if len(address) < 1: 
    address = 'Warsaw, Poland' 
 
#encoding to UTF-8 and adding to the API URL 
url = api_url + ENCODE({'address': address})



Далее нужно выполнить запрос API, получить координаты широты и долготы из XML:

# получаем данные
data = OPEN(url).read() 
 
# преобразуем в XML 
tree = XML.fromstring(data) 
res = tree.findall('result') 
 
# dig into the XML tree to find 'latitude' 
lat = res[0].find('geometry').find('location').find('lat').text 
# find longitude 
lng = res[0].find('geometry').find('location').find('lng').text



Давайте отформатируем координаты в более привлекательной, удобной для пользователя форме, преобразовав их в число с плавающей запятой:

lat = float(lat) 
lng = float(lng) 
lat_c = 'S' if lat < 0 else 'N' 
lng_c = 'W' if lng < 0 else 'E'



В качестве последнего шага нам нужно вывести запрошенный адрес и соответствующие координаты:

# the actual object found by the API
location = res[0].find('formatted_address').text

# The results
print("==>", location, "<==")
print('Latitude: {0:.3f}{1}'.format(abs(lat), lat_c))
print('Longitude: {0:.3f}{1}'.format(abs(lng), lng_c)) = float(lng)
lat_c = 'S' if lat < 0 else 'N'
lng_c = 'W' if lng < 0 else 'E'