../_images/logo_actinia.png ../_images/OSGeo_community.png

Observera

Detta projekt ingår endast på OSGeoLives virtuella maskindisk (VMDK)

actinia Snabbstart

Actinia är ett REST API med öppen källkod för skalbar, distribuerad, högpresterande bearbetning av geografiska data som huvudsakligen använder GRASS GIS för beräkningsuppgifter. Actinia tillhandahåller ett REST API för att bearbeta satellitbilder, tidsserier av satellitbilder, raster- och vektordata.

Actinia kan användas på olika sätt:

I den här snabbstarten använder vi GRASS GIS för att på ett enkelt sätt starta kommandon från sessionen till actinia-servern (som i sin tur använder GRASS GIS). Tanken är att snabbt utveckla ett arbetsflöde lokalt på små datamängder för att sedan köra det på servern.

Använda actinia med en Jupyter-anteckningsbok

Många Jupyter-anteckningsböcker för actinia finns tillgängliga från https://github.com/actinia-org/actinia-jupyter

Introduktion till ace - actinia command execution

Verktyget ace (detaljer) gör det möjligt att köra ett enda GRASS GIS-kommando eller en lista med GRASS GIS-kommandon på en actinia REST-tjänst (https://actinia.mundialis.de/). Dessutom ger det jobbhantering, möjlighet att lista platser, kartuppsättningar och kartlager som användaren har tillgång till samt skapande och borttagning av kartuppsättningar.

Verktyget ace måste köras i en aktiv GRASS GIS-session. Det installeras med g.extension extension=ace url=https://github.com/actinia-org/ace.

Alla kommandon kommer att utföras som standard i en eephemeral databas. Därför måste genererad utdata exporteras med hjälp av utökade GRASS-kommandon.

Alternativet mapset=MAPSET_NAME gör det möjligt att utföra kommandon i den beständiga användardatabasen. Det kan användas tillsammans med alternativet location=LOCATION_NAME.

Konfigurera din miljö

Se till att köra följande kommandon under en GRASS GIS-session.

Användaren måste konfigurera följande miljövariabler för att ange actinia-servern och autentiseringsuppgifterna:

# set credentials and REST server URL
export ACTINIA_USER='demouser'
export ACTINIA_PASSWORD='gu3st!pa55w0rd'
export ACTINIA_URL='https://actinia.mundialis.de/latest'

Få tillgång till exempeldata

Utvalda dataset är tillgängliga för demo-användaren. För att lista de platser du har tillgång till kör du

ace -l
['latlong_wgs84', 'ECAD', 'nc_spm_08']

Följande kommando listar kartset för aktuell plats i den aktiva GRASS GIS-sessionen (nc_spm_08):

# running ace in the "nc_spm_08" location
# (the current location name is propagated to the server):
ace location="nc_spm_08" -m
['PERMANENT', 'landsat', 'modis_lst']

Få tillgång till data från externa källor

GRASS GIS-kommandon kan kompletteras med actinia-specifika tillägg. Operatorn @ kan anges för en inmatningsparameter för att importera en webbaserad resurs och för att ange export av en utmatningsparameter.

Det är viktigt att namnet på den lokala platsen och kartuppsättningen motsvarar namnet på actinia REST-servern.

För närvarande tillgängliga dataset är (organiserade efter projektioner):

Inspektera REST-anropet före inlämning

För att generera en JSON-begäran för actinia-processens kedja behöver du bara lägga till flaggan -d (dry-run):

ace location="nc_spm_08" grass_command="r.slope.aspect elevation=elevation slope=myslope" -d

Visa en karta - kartåtergivning

Det är mycket enkelt (och snabbt) att rendera en karta:

# check amount of pixels, just FYI
ace location="latlong_wgs84" grass_command="r.info globcover@globcover"
# render the map ... 7 billion pixels
ace location="latlong_wgs84" render_raster="globcover@globcover"
ESA Globcover-karta visad av actinia

ESA Globcover-karta visad av actinia

Ephemeral processing är standardmetoden för bearbetning av actinia. Kommandon utförs i en efemär kartuppsättning som tas bort efter bearbetningen. Du kan exportera utdata från GRASS GIS-moduler för att lagra beräkningsresultatet för nedladdning och vidare analys. Följande exportformat stöds för närvarande:

  • raster: COG, GTiff

  • vektor: GPKG, GML, GeoJSON, ESRI_Shapefile

  • tabell: CSV, TXT

Exempel på skript

Exempel 1: beräkning av lutning och aspekt samt univariat statistik från en höjdmodell

Följande kommandon (som ska lagras i ett skript och köras med ace) importerar ett rasterskikt från en internetkälla som rasterkarta elev, ställer in beräkningsregionen till kartan och beräknar lutningen. Ytterligare information om rasterlagret begärs med r.info.

Spara följande skript som textfil ace_dtm_statistics.sh:

# grass ~/grassdata/nc_spm_08/user1/
# Import the web resource and set the region to the imported map
g.region raster=elev@https://storage.googleapis.com/graas-geodata/elev_ned_30m.tif -ap
# Compute univariate statistics
r.univar map=elev
r.info elev
# Compute the slope of the imported map and mark it for export as a COG file (Cloud Optimized GeoTIFF)
r.slope.aspect elevation=elev slope=slope_elev+COG
r.info slope_elev

Spara skriptet i textfilen till /tmp/ace_dtm_statistics.sh och kör det sparade skriptet som

ace --location nc_spm_08 --script ace_dtm_statistics.sh

Resultaten (meddelanden, statistik, filer) tillhandahålls som REST-resurser.

För att generera en JSON-begäran för actinia-processens kedja behöver du bara lägga till flaggan -d (dry-run):

ace -d location="nc_spm_08" script="/tmp/ace_dtm_statistics.sh"

Utmatningen bör se ut så här:

{
  "version": "1",
  "list": [
    {
      "module": "g.region",
      "id": "g.region_1804289383",
      "flags": "pa",
      "inputs": [
        {
          "import_descr": {
            "source": "https://storage.googleapis.com/graas-geodata/elev_ned_30m.tif",
            "type": "raster"
          },
          "param": "raster",
          "value": "elev"
        }
      ]
    },
    {
      "module": "r.univar",
      "id": "r.univar_1804289383",
      "inputs": [
        {
          "param": "map",
          "value": "elev"
        },
        {
          "param": "percentile",
          "value": "90"
        },
        {
          "param": "separator",
          "value": "pipe"
        }
      ]
    },
    {
      "module": "r.info",
      "id": "r.info_1804289383",
      "inputs": [
        {
          "param": "map",
          "value": "elev"
        }
      ]
    },
    {
      "module": "r.slope.aspect",
      "id": "r.slope.aspect_1804289383",
      "inputs": [
        {
          "param": "elevation",
          "value": "elev"
        },
        {
          "param": "format",
          "value": "degrees"
        },
        {
          "param": "precision",
          "value": "FCELL"
        },
        {
          "param": "zscale",
          "value": "1.0"
        },
        {
          "param": "min_slope",
          "value": "0.0"
        }
      ],
      "outputs": [
        {
          "export": {
            "format": "COG",
            "type": "raster"
          },
          "param": "slope",
          "value": "slope_elev"
        }
      ]
    },
    {
      "module": "r.info",
      "id": "r.info_1804289383",
      "inputs": [
        {
          "param": "map",
          "value": "slope_elev"
        }
      ]
    }
  ]
}

Exempel 2: Segmentering av ortofotobilder med export

Spara följande skript som textfil /tmp/ace_segmentation.sh:

# grass ~/grassdata/nc_spm_08/user1/
# Import the web resource and set the region to the imported map
# we apply a importer trick for the import of multi-band GeoTIFFs:
# install with: g.extension importer url=https://github.com/actinia-org/importer
importer raster=ortho2010@https://apps.mundialis.de/workshops/osgeo_ireland2017/north_carolina/ortho2010_t792_subset_20cm.tif
# The importer has created three new raster maps, one for each band in the geotiff file
# stored them in an image group
r.info map=ortho2010.1
r.info map=ortho2010.2
r.info map=ortho2010.3
# Set the region and resolution
g.region raster=ortho2010.1 res=1 -p
# Note: the RGB bands are organized as a group
# export as a as COG file (Cloud Optimized GeoTIFF)
i.segment group=ortho2010 threshold=0.25 output=ortho2010_segment_25+COG goodness=ortho2010_seg_25_fit+COG
# Finally vectorize segments with r.to.vect and export as a GeoJSON file
r.to.vect input=ortho2010_segment_25 type=area output=ortho2010_segment_25+GeoJSON

Kör skriptet som sparats i en textfil som

ace location="nc_spm_08" script="/tmp/ace_segmentation.sh"

Resultaten (meddelanden, statistik, filer) tillhandahålls som REST-resurser.

Exempel på uthållig bearbetning

GRASS GIS-kommandon kan köras i en användarspecifik beständig databas. Användaren måste skapa en kartuppsättning på en befintlig plats. Denna kartuppsättning kan nås via ace. Alla bearbetningsresultat av kommandon som körs i denna mapset kommer att lagras permanent. Tänk på att bearbetningen kommer att utföras i en kortvarig databas som kommer att flyttas till den permanenta lagringen med rätt namn efter bearbetningen.

För att skapa en ny mapset på nc_spm_08-platsen med namnet test_mapset måste följande kommando köras

ace location="nc_spm_08" create_mapset="test_mapset"

Kör kommandona från statistikskriptet i den nya beständiga kartuppsättningen

ace location="nc_spm_08" mapset="test_mapset" script="/path/to/ace_dtm_statistics.sh"

Visa alla rasterkartor som har skapats med skriptet i test_mapset

ace location="nc_spm_08" mapset="test_mapset" grass_commmand="g.list type=raster mapset=test_mapset"

Visa information om rasterkartan elev och slope_elev

ace location="nc_spm_08" mapset="test_mapset" grass_command="r.info elev@test_mapset"
ace location="nc_spm_08" mapset="test_mapset" grass_command="r.info slope_elev@test_mapset"

Ta bort test_mapset (dubbelkolla alltid namn när du tar bort)

ace location="nc_spm_08" delete_mapset="test_mapset"

Om den aktiva GRASS GIS-sessionen har identiska namn på platser och kartor kan ett alias användas för att undvika att använda alternativet persistent i varje enskilt kommandoanrop:

alias acp="ace --persistent `g.mapset -p`"

Vi antar att i den aktiva GRASS GIS-sessionen är den aktuella platsen nc_spm_08 och det aktuella mapsetet är test_mapset. Då kan kommandona från ovan utföras på följande sätt:

ace location="nc_spm_08" create_mapset="test_mapset"
acp location="nc_spm_08" script="/path/to/ace_dtm_statistics.sh"
acp location="nc_spm_08" grass_command="g.list type=raster mapset=test_mapset"
acp location="nc_spm_08" grass_command="r.info elev@test_mapset"
acp location="nc_spm_08" grass_command="r.info slope_elev@test_mapset"

Saker att prova

Installera på OSGeoLive VM med Docker Compose

Krav: docker och docker-compose (redan tillgängligt i OSGeoLive VM-versionen)

För att bygga och driftsätta actinia, kör

git clone https://github.com/actinia-org/actinia-core.git
cd actinia_core
docker-compose -f docker/docker-compose.yml up

Nu har du en fungerande actinia-instans lokalt! Kontrollera med

curl http://127.0.0.1:8088/api/v3/version

Skapa nya platser

# (note: the "demouser" is not enabled for this)
#
# create new location
ace create_location="mylatlon 4326"
# create new mapset within location
ace location="mylatlon" create_mapset="user1"

Installera GRASS GIS-tillägg (extensions)

# (requires elevated user privileges)
#
# list existing addons, see also
# https://grass.osgeo.org/grass-stable/manuals/addons/
ace location="latlong_wgs84" grass_command="g.extension -l"

# install machine learning addon r.learn.ml2
ace location="latlong_wgs84" grass_command="g.extension extension=\"r.learn.ml2\""

Hur vill du gå vidare?

  • Besök actinias webbplats på https://actinia.mundialis.de <https://actinia.mundialis.de>`_

  • actinia handledning: https://neteler.gitlab.io/actinia-introduction

  • Further reading: Neteler, M., Gebbert, S., Tawalika, C., Bettge, A., Benelcadi, H., Löw, F., Adams, T, Paulsen, H. (2019). Actinia: cloud based geoprocessing. In Proc. of the 2019 conference on Big Data from Space (BiDS’2019) (pp. 41-44). EUR 29660 EN, Publications Office of the European Union 5, Luxembourg: P. Soille, S. Loekken, and S. Albani (Eds.). (DOI)