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.

rapidosmm

Autorización con token de Mapflow

Utilicemos el token de Mapflow para obtener más autorización.

import base64

token = input("token:") # Your Mapflow token goes here. Obtain it at https://app.mapflow.ai/account/api

username, password = base64.b64decode(token).decode().split(':')
print(username, password)

Ahora obtiene su token decodificado como nombre de usuario y contraseña y lo utiliza para la autorización con las solicitudes.

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.

  1. 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, Арабхана
...
  1. 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)