Normalizar una entidad con requests
Se puede consultar la API para normalizar un nombre de entidad geográfica y obtener sus atributos asociados:
Consulta
import requests
import urllib
API_BASE_URL = "https://apis.datos.gob.ar/georef/api/v2.0/"
def get_similar(endpoint, nombre, **kwargs):
kwargs["nombre"] = nombre
url = "{}{}?{}".format(API_BASE_URL, endpoint, urllib.parse.urlencode(kwargs))
return requests.get(url).json()[endpoint]
provincias = get_similar("provincias", "San Juan")
Resultado:
[{
'centroide': {'lat': -30.865368, 'lon': -68.889491},
'id': '70',
'nombre': 'San Juan'
}]
Normalizar una lista de nombres (consulta por lotes)
Para normalizar múltiples entidades a la vez, puede utilizarse el método POST:
Consulta
def get_similar_bulk(endpoint, nombres):
data = {
endpoint: [
{"nombre": nombre, "max": 1} for nombre in nombres
]
}
url = API_BASE_URL + endpoint
results = requests.post(
url, json=data, headers={"Content-Type": "application/json"}
).json()
parsed_results = [
single_result[endpoint][0] if single_result[endpoint] else {}
for single_result in results["resultados"]
]
return parsed_results
provincias = get_similar_bulk("provincias", ["pxa", "sant fe"])
Resultado:
[
{}, # "pxa" no obtuvo coincidencias
{
'centroide': {'lat': -30.706927, 'lon': -60.949837},
'id': '82',
'nombre': 'Santa Fe'
}
]
Georreferenciar puntos (enriquecer coordenadas)
También es posible consultar qué unidades territoriales contienen a un punto geográfico específico (latitud y longitud):
Consulta
def get_territorial_units(ubicaciones):
endpoint = "ubicacion"
data = {
"ubicaciones": [
{"lat": u["lat"], "lon": u["lon"], "aplanar": True}
for u in ubicaciones
]
}
url = API_BASE_URL + endpoint
results = requests.post(
url, json=data, headers={"Content-Type": "application/json"}
).json()
parsed_results = [
single_result[endpoint] if single_result[endpoint] else {}
for single_result in results["resultados"]
]
return parsed_results
ubicaciones = get_territorial_units([
{"lat": -32.9477132, "lon": -60.6304658},
{"lat": -34.6037389, "lon": -58.3815704}
])
Resultado:
[
{
'departamento_id': '30105',
'departamento_nombre': 'Victoria',
'municipio_id': '82210',
'municipio_nombre': 'Rosario',
'provincia_id': '30',
'provincia_nombre': 'Entre Ríos'
},
{
'departamento_id': '02007',
'departamento_nombre': 'Comuna 1',
'municipio_id': None,
'municipio_nombre': None,
'provincia_id': '02',
'provincia_nombre': 'Ciudad Autónoma de Buenos Aires'
}
]