Guías de la API de Mapflow
Cómo ejecutar procesamiento masivo usando Mapflow API
En caso de que tenga varios polígonos para procesar o actualizar, puede resultar aburrido cargarlos uno por uno utilizando herramientas de usuario web o SIG. En este caso, será mejor que pienses en usar Mapflow API de procesamiento de flujo de mapas. En este ejemplo, supongamos que tenemos una lista de polígonos que indican los límites de los lugares poblados y queremos extraer características como «edificios» con la API de procesamiento de Mapflow.
1. To make it more realistic let’s download some populated places borders for the sample area in Uzbekistan using Openstreetmap. To do this we can make a query with Overpass Turbo API like this: We can use QuickOSM plugin in QGIS which is very friendly when it comes to downloading a managable volume of data from Openstreetmap.
Crea el proyecto (es opcional)
Consejo
Puede resultar útil organizar su procesamiento con los proyectos. Para hacer esto, cree el nuevo proyecto con el siguiente método API.
import requests
import json
url = "https://api.mapflow.ai/rest/projects"
headers = {
'Content-Type': 'application/json'
}
payload = json.dumps({
"name": "My new project" # Your project name
})
response = requests.request("POST", url, headers=headers, auth=(username,password), data=payload)
if response.status_code == 200:
print(response.text)
else:
print(f"Request failed")
print(response.text)
Aquí obtenemos la respuesta que contiene el ID del proyecto, que podemos usar para crear los procesamientos en este proyecto específico.
Ejemplo de respuesta:
{
"id": "fb49b97e-51ec-4b31-872f-d1411284de85",
"name": "My new project",
...
}
Ver más en Proyectos - API
Preparar AOI para los procesamientos.
Guardemos áreas de interés con las propiedades como un archivo GeoJSON, ya que es un formato simple y directo para usar en cualquier aplicación o software SIG. Luego abrimos este archivo y creamos un diccionario de Python para recorrer todas las funciones de GeoJSON que usaremos como geometrías AOI para crear el procesamiento. Como esto:
with open('<path to the file>', 'r') as file: # Define your GeoJSON file path
geojson_data = json.load(file)
for feature in geojson_data['features']:
name = feature['properties']['name'] # Extract the "name" property from OSM data
print(name);
Comprobemos si creamos la matriz de datos a partir de nuestro archivo y mostremos todas las funciones por sus nombres. En el siguiente paso, usaremos la propiedad nombre para definir el procesamiento. El «nombre» es opcional pero es más conveniente trabajar con los resultados después.
Ejecutar los procesamientos
Ahora estamos listos para crear el procesamiento para cada AOI usando su geometría.
url = "https://api.mapflow.ai/rest/processings"
for feature in geojson_data['features']:
name = feature['properties']['name']
geometry = feature['geometry']
payload = json.dumps({
"name": name,
"projectId": "fb49b97e-51ec-4b31-872f-d1411284de85", # Here is your project Id to link the processing to the specific project.
"wdName": "🏠 Buildings",
"geometry": geometry
})
response = requests.request("POST", url, headers=headers, auth=(username,password), data=payload)
if response.status_code == 200:
print(f"Request successful: {name}")
else:
print(f"Request failed for feature: {name}")
print(response.text)
Si todo se hizo correctamente, se mostrará la lista de procesamiento creado exitosamente.
Descargue todos los resultados usando Mapflow API
Cuando se completen todos los procesamientos, podrá descargar fácilmente los resultados de cada uno.
Si tiene un procesamiento con múltiples AOI (de forma predeterminada, la cantidad de AOI en un procesamiento está limitada a 10) puede ejecutar una única llamada API para descargar los resultados:
curl --location 'https://api.mapflow.ai/rest/processings/<ID>/result' \
--header 'Authorization: Basic <YOUR API TOKEN>' -O <YOUR PATH TO FILE>.geojson
En el caso de múltiples procesamientos, puede resultarle útil ejecutar el pequeño script.
Obtenga la lista de todos los «identificadores» y «nombres» procesando:
import requests
import json
url = "https://api.mapflow.ai/rest/projects/fb49b97e-51ec-4b31-872f-d1411284de85/processings"
response = requests.request("GET", url, auth=(username,password))
json_data = response.json()
values = []
for item in json_data:
if "id" in item and "name" in item:
values.append((item["id"], item["name"]))
if response.status_code == 200:
for id, name in values:
print(f"{id}, {name}")
else:
print(response.text)
Ejemplo de respuesta:
5f748822-c94a-4233-ae1e-7622973bf9b5, Бой
87f258e6-c1ce-4deb-8155-ccd6b21ac237, Авазли
1e24c0e5-9b6f-4a26-9970-82dfb1f67807, Avazali
0316606a-4c04-4196-bdab-6495af4bb7b0, Авлиятепа
38435f06-6b85-420e-86f8-3ebef4755480, Акбуйра
33ffec93-ef2b-4ead-a51e-30cad1bcb71d, Аксулат
c8f73cf5-8a44-4c36-8b2e-49b27f7f5da5, Актепа
6eaca828-41ec-4ce5-aea4-b9f039211bbe, Арабхана
...
Guarde los resultados de todos los procesamientos enumerados:
output_json = '<path to the folder>' # Define local folder to save files
for id, name in values:
response = requests.request("GET", url + id + '/result', headers=headers)
if response.status_code == 200:
with open(output_json_file + name + '.geojson', 'w') as geojson:
geojson.write(response.text)
print(f"File saved")
else:
print(f"Request failed")
print(response.text)