8.7 Dados do Google Maps

Neste texto a API de geocodificação do Google é acessada por meio de uma interface HTTP usando um script Python.

A geocodificação é o processo de converter endereços (como nome da rua e número) em coordenadas geográficas (latitude e longitude) que permitem a inserção de marcadores de local em um mapa ou o posicionamento do mapa. A geocodificação inversa é o processo de conversão de coordenadas geográficas em um endereço legível. O serviço de geocodificação inversa da Google Maps Geocoding API também permite que você encontre o endereço de um determinado ID de local.

Para usar a Google Maps Geocoding API, você deve antes ativar a API no Google API Console e obter as credenciais de autenticação adequadas. Você precisa informar uma chave de API em cada solicitação. Então, a primeira coisa a ser feita é abrir a página Primeiros passos e seguir as instruções dadas nesta página.

O script Python a seguir solicita uma resposta para o endereço ‘Igreja de Nossa Senhora da Candelária – Praça Pio X’, mostra os resultados e extrai as coordenadas destes resultados. A chave da API é lida no arquivo GoogleMapsKey.txt.

# Google Maps Platform - Web Services - Geocoding API
# https://developers.google.com/maps/documentation/geocoding/start
#
# Este script em Python mostra como geolocalizar o endereço
# Igreja de Nossa Senhora da Candelária - Praça Pio X - Centro,
# Rio de Janeiro - RJ, acessando a API do Google Maps Geocoding
# através da interface HTTP
#
# -*- coding: utf-8 -*-

import http.client, urllib.parse
import json

# Read the Google Maps Key from 'GoogleMapsKey.txt' file
GoogleMapsKey = open('GoogleMapsKey.txt', 'r').read().rstrip("\n")

host = 'maps.googleapis.com'
path = '/maps/api/geocode/json'
address = 'Igreja de Nossa Senhora da Candelária - Praça Pio X'

params = '?address=' + urllib.parse.quote (address) + \
         '&key=' + GoogleMapsKey

def get_response():
    conn = http.client.HTTPSConnection(host)
    conn.request("GET", path + params)
    response = conn.getresponse()
    return response.read()

results = json.loads(get_response())
print(json.dumps(results, indent=4))
loc = "Location: " + \
      json.dumps(results['results'][0]['geometry']['location'])
print(loc)

Abaixo está mostrada a saída produzida por este script

$ python google_maps_candelaria.py
{
    "results": [
        {
            "address_components": [
                {
                    "long_name": "s/n",
                    "short_name": "s/n",
                    "types": [
                        "street_number"
                    ]
                },
                {
                    "long_name": "Pra\u00e7a Pio X",
                    "short_name": "Pra\u00e7a Pio X",
                    "types": [
                        "route"
                    ]
                },
                {
                    "long_name": "Centro",
                    "short_name": "Centro",
                    "types": [
                        "political",
                        "sublocality",
                        "sublocality_level_1"
                    ]
                },
                {
                    "long_name": "Rio de Janeiro",
                    "short_name": "Rio de Janeiro",
                    "types": [
                        "administrative_area_level_2",
                        "political"
                    ]
                },
                {
                    "long_name": "Rio de Janeiro",
                    "short_name": "RJ",
                    "types": [
                        "administrative_area_level_1",
                        "political"
                    ]
                },
                {
                    "long_name": "Brazil",
                    "short_name": "BR",
                    "types": [
                        "country",
                        "political"
                    ]
                },
                {
                    "long_name": "20040-020",
                    "short_name": "20040-020",
                    "types": [
                        "postal_code"
                    ]
                }
            ],
            "formatted_address": "Pra\u00e7a Pio X, s/n - Centro, Rio de Janeiro - RJ, 20040-020, Brazil",
            "geometry": {
                "location": {
                    "lat": -22.9008826,
                    "lng": -43.1778419
                },
                "location_type": "ROOFTOP",
                "viewport": {
                    "northeast": {
                        "lat": -22.8995336197085,
                        "lng": -43.1764929197085
                    },
                    "southwest": {
                        "lat": -22.9022315802915,
                        "lng": -43.1791908802915
                    }
                }
            },
            "place_id": "ChIJIe1CNFl_mQARG8VNRU8zMXY",
            "types": [
                "church",
                "establishment",
                "place_of_worship",
                "point_of_interest"
            ]
        }
    ],
    "status": "OK"
}
Location: {"lat": -22.9008826, "lng": -43.1778419}
$

Fontes

A imagem destacada mostra a execução deste script na IDE Spyder.

Map

Para ver a resposta da API no mapa, foi criado o script google_maps_candelaria.py em que gera o arquivo no formato GPX (GPS eXchange Format) google_maps_candelaria.gpx.

8. Dados externos