geocompx / geocompr

Geocomputation with R: an open source book
https://r.geocompx.org/
Other
1.59k stars 585 forks source link

RQGIS code not working in geocompr:qgis image #463

Closed Robinlovelace closed 3 years ago

Robinlovelace commented 4 years ago

Can you try to reproduce this @jannes-m:

docker run -d -p 8799:8787 -e USERID=$UID -e PASSWORD=strongpass -v $(pwd):/home/rstudio/geocompr robinlovelace/geocompr:qgis

And then in that container's RStudio Server instance:

library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.2, PROJ 6.3.0
library(raster)
#> Loading required package: sp
library(RQGIS)
#> Loading required package: reticulate
set_env(dev = FALSE)
#> Assuming that your root path is '/usr'!
#> $root
#> [1] "/usr"
#> 
#> $qgis_prefix_path
#> [1] "/usr/bin/qgis"
#> 
#> $python_plugins
#> [1] "/usr/share/qgis/python/plugins"
data("incongruent", "aggregating_zones", package = "spData")
incongr_wgs = st_transform(incongruent, 4326)
open_app()
#> Warning: Python '/usr/bin/python2' was requested but '/usr/bin/python3' was
#> loaded instead (see reticulate::py_config() for more information)
#> Error in py_run_string_impl(code, local, convert): ModuleNotFoundError: No module named 'PyQt4'
#> 
#> Detailed traceback: 
#>   File "<string>", line 1, in <module>

Created on 2020-01-14 by the reprex package (v0.3.0)

Session info ``` r devtools::session_info() #> Warning in system("timedatectl", intern = TRUE): running command 'timedatectl' #> had status 1 #> ─ Session info ─────────────────────────────────────────────────────────────── #> setting value #> version R version 3.6.2 (2019-12-12) #> os Debian GNU/Linux 10 (buster) #> system x86_64, linux-gnu #> ui X11 #> language (EN) #> collate en_US.UTF-8 #> ctype en_US.UTF-8 #> tz Etc/UTC #> date 2020-01-14 #> #> ─ Packages ─────────────────────────────────────────────────────────────────── #> package * version date lib source #> assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.6.2) #> backports 1.1.5 2019-10-02 [1] CRAN (R 3.6.2) #> callr 3.4.0 2019-12-09 [1] CRAN (R 3.6.2) #> class 7.3-15 2019-01-01 [2] CRAN (R 3.6.2) #> classInt 0.4-2 2019-10-17 [1] CRAN (R 3.6.2) #> cli 2.0.1 2020-01-08 [1] CRAN (R 3.6.2) #> codetools 0.2-16 2018-12-24 [2] CRAN (R 3.6.2) #> crayon 1.3.4 2017-09-16 [1] CRAN (R 3.6.2) #> DBI 1.1.0 2019-12-15 [1] CRAN (R 3.6.2) #> desc 1.2.0 2018-05-01 [1] CRAN (R 3.6.2) #> devtools 2.2.1 2019-09-24 [1] CRAN (R 3.6.2) #> digest 0.6.23 2019-11-23 [1] CRAN (R 3.6.2) #> e1071 1.7-3 2019-11-26 [1] CRAN (R 3.6.2) #> ellipsis 0.3.0 2019-09-20 [1] CRAN (R 3.6.2) #> evaluate 0.14 2019-05-28 [1] CRAN (R 3.6.2) #> fansi 0.4.1 2020-01-08 [1] CRAN (R 3.6.2) #> fs 1.3.1 2019-05-06 [1] CRAN (R 3.6.2) #> glue 1.3.1 2019-03-12 [1] CRAN (R 3.6.2) #> highr 0.8 2019-03-20 [1] CRAN (R 3.6.2) #> hms 0.5.3 2020-01-08 [1] CRAN (R 3.6.2) #> htmltools 0.4.0 2019-10-04 [1] CRAN (R 3.6.2) #> jsonlite 1.6 2018-12-07 [1] CRAN (R 3.6.2) #> KernSmooth 2.23-16 2019-10-15 [2] CRAN (R 3.6.2) #> knitr 1.26 2019-11-12 [1] CRAN (R 3.6.2) #> lattice 0.20-38 2018-11-04 [2] CRAN (R 3.6.2) #> magrittr 1.5 2014-11-22 [1] CRAN (R 3.6.2) #> memoise 1.1.0 2017-04-21 [1] CRAN (R 3.6.2) #> pillar 1.4.3 2019-12-20 [1] CRAN (R 3.6.2) #> pkgbuild 1.0.6 2019-10-09 [1] CRAN (R 3.6.2) #> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 3.6.2) #> pkgload 1.0.2 2018-10-29 [1] CRAN (R 3.6.2) #> prettyunits 1.1.0 2020-01-09 [1] CRAN (R 3.6.2) #> processx 3.4.1 2019-07-18 [1] CRAN (R 3.6.2) #> ps 1.3.0 2018-12-21 [1] CRAN (R 3.6.2) #> R6 2.4.1 2019-11-12 [1] CRAN (R 3.6.2) #> rappdirs 0.3.1 2016-03-28 [1] CRAN (R 3.6.2) #> raster * 3.0-10 2020-01-13 [1] Github (rspatial/raster@0c39ab5) #> Rcpp 1.0.3 2019-11-08 [1] CRAN (R 3.6.2) #> readr 1.3.1 2018-12-21 [1] CRAN (R 3.6.2) #> remotes 2.1.0 2019-06-24 [1] CRAN (R 3.6.2) #> reticulate * 1.14 2019-12-17 [1] CRAN (R 3.6.2) #> rgdal 1.4-8 2019-11-27 [1] CRAN (R 3.6.2) #> rlang 0.4.2 2019-11-23 [1] CRAN (R 3.6.2) #> rmarkdown 2.0 2019-12-12 [1] CRAN (R 3.6.2) #> rprojroot 1.3-2 2018-01-03 [1] CRAN (R 3.6.2) #> RQGIS * 1.0.4 2018-08-13 [1] CRAN (R 3.6.2) #> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.6.2) #> sf * 0.8-1 2020-01-14 [1] Github (r-spatial/sf@1e095d4) #> sp * 1.3-2 2019-11-07 [1] CRAN (R 3.6.2) #> stringi 1.4.5 2020-01-11 [1] CRAN (R 3.6.2) #> stringr 1.4.0 2019-02-10 [1] CRAN (R 3.6.2) #> testthat 2.3.1 2019-12-01 [1] CRAN (R 3.6.2) #> tibble 2.1.3 2019-06-06 [1] CRAN (R 3.6.2) #> units 0.6-5 2019-10-08 [1] CRAN (R 3.6.2) #> usethis 1.5.1 2019-07-04 [1] CRAN (R 3.6.2) #> vctrs 0.2.1 2019-12-17 [1] CRAN (R 3.6.2) #> withr 2.1.2 2018-03-15 [1] CRAN (R 3.6.2) #> xfun 0.12 2020-01-13 [1] CRAN (R 3.6.2) #> yaml 2.2.0 2018-07-25 [1] CRAN (R 3.6.2) #> zeallot 0.1.0 2018-01-28 [1] CRAN (R 3.6.2) #> #> [1] /usr/local/lib/R/site-library #> [2] /usr/local/lib/R/library ```
Robinlovelace commented 4 years ago

The if I allow it to use the default Python install with

RETICULATE_PYTHON=/usr/bin/python

I get

library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.2, PROJ 6.3.0
library(raster)
#> Loading required package: sp
library(RQGIS)
#> Loading required package: reticulate
set_env(dev = FALSE)
#> Assuming that your root path is '/usr'!
#> $root
#> [1] "/usr"
#> 
#> $qgis_prefix_path
#> [1] "/usr/bin/qgis"
#> 
#> $python_plugins
#> [1] "/usr/share/qgis/python/plugins"
data("incongruent", "aggregating_zones", package = "spData")
incongr_wgs = st_transform(incongruent, 4326)
open_app()
#> Error: Python shared library not found, Python bindings not loaded.
#> Use reticulate::install_miniconda() if you'd like to install a Miniconda Python environment.

Created on 2020-01-14 by the reprex package (v0.3.0)

Session info ``` r devtools::session_info() #> Warning in system("timedatectl", intern = TRUE): running command 'timedatectl' #> had status 1 #> ─ Session info ─────────────────────────────────────────────────────────────── #> setting value #> version R version 3.6.2 (2019-12-12) #> os Debian GNU/Linux 10 (buster) #> system x86_64, linux-gnu #> ui X11 #> language (EN) #> collate en_US.UTF-8 #> ctype en_US.UTF-8 #> tz Etc/UTC #> date 2020-01-14 #> #> ─ Packages ─────────────────────────────────────────────────────────────────── #> package * version date lib source #> assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.6.2) #> backports 1.1.5 2019-10-02 [1] CRAN (R 3.6.2) #> callr 3.4.0 2019-12-09 [1] CRAN (R 3.6.2) #> class 7.3-15 2019-01-01 [2] CRAN (R 3.6.2) #> classInt 0.4-2 2019-10-17 [1] CRAN (R 3.6.2) #> cli 2.0.1 2020-01-08 [1] CRAN (R 3.6.2) #> codetools 0.2-16 2018-12-24 [2] CRAN (R 3.6.2) #> crayon 1.3.4 2017-09-16 [1] CRAN (R 3.6.2) #> DBI 1.1.0 2019-12-15 [1] CRAN (R 3.6.2) #> desc 1.2.0 2018-05-01 [1] CRAN (R 3.6.2) #> devtools 2.2.1 2019-09-24 [1] CRAN (R 3.6.2) #> digest 0.6.23 2019-11-23 [1] CRAN (R 3.6.2) #> e1071 1.7-3 2019-11-26 [1] CRAN (R 3.6.2) #> ellipsis 0.3.0 2019-09-20 [1] CRAN (R 3.6.2) #> evaluate 0.14 2019-05-28 [1] CRAN (R 3.6.2) #> fansi 0.4.1 2020-01-08 [1] CRAN (R 3.6.2) #> fs 1.3.1 2019-05-06 [1] CRAN (R 3.6.2) #> glue 1.3.1 2019-03-12 [1] CRAN (R 3.6.2) #> highr 0.8 2019-03-20 [1] CRAN (R 3.6.2) #> hms 0.5.3 2020-01-08 [1] CRAN (R 3.6.2) #> htmltools 0.4.0 2019-10-04 [1] CRAN (R 3.6.2) #> jsonlite 1.6 2018-12-07 [1] CRAN (R 3.6.2) #> KernSmooth 2.23-16 2019-10-15 [2] CRAN (R 3.6.2) #> knitr 1.26 2019-11-12 [1] CRAN (R 3.6.2) #> lattice 0.20-38 2018-11-04 [2] CRAN (R 3.6.2) #> magrittr 1.5 2014-11-22 [1] CRAN (R 3.6.2) #> memoise 1.1.0 2017-04-21 [1] CRAN (R 3.6.2) #> pillar 1.4.3 2019-12-20 [1] CRAN (R 3.6.2) #> pkgbuild 1.0.6 2019-10-09 [1] CRAN (R 3.6.2) #> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 3.6.2) #> pkgload 1.0.2 2018-10-29 [1] CRAN (R 3.6.2) #> prettyunits 1.1.0 2020-01-09 [1] CRAN (R 3.6.2) #> processx 3.4.1 2019-07-18 [1] CRAN (R 3.6.2) #> ps 1.3.0 2018-12-21 [1] CRAN (R 3.6.2) #> R6 2.4.1 2019-11-12 [1] CRAN (R 3.6.2) #> raster * 3.0-10 2020-01-13 [1] Github (rspatial/raster@0c39ab5) #> Rcpp 1.0.3 2019-11-08 [1] CRAN (R 3.6.2) #> readr 1.3.1 2018-12-21 [1] CRAN (R 3.6.2) #> remotes 2.1.0 2019-06-24 [1] CRAN (R 3.6.2) #> reticulate * 1.14 2019-12-17 [1] CRAN (R 3.6.2) #> rgdal 1.4-8 2019-11-27 [1] CRAN (R 3.6.2) #> rlang 0.4.2 2019-11-23 [1] CRAN (R 3.6.2) #> rmarkdown 2.0 2019-12-12 [1] CRAN (R 3.6.2) #> rprojroot 1.3-2 2018-01-03 [1] CRAN (R 3.6.2) #> RQGIS * 1.0.4 2018-08-13 [1] CRAN (R 3.6.2) #> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.6.2) #> sf * 0.8-1 2020-01-14 [1] Github (r-spatial/sf@1e095d4) #> sp * 1.3-2 2019-11-07 [1] CRAN (R 3.6.2) #> stringi 1.4.5 2020-01-11 [1] CRAN (R 3.6.2) #> stringr 1.4.0 2019-02-10 [1] CRAN (R 3.6.2) #> testthat 2.3.1 2019-12-01 [1] CRAN (R 3.6.2) #> tibble 2.1.3 2019-06-06 [1] CRAN (R 3.6.2) #> units 0.6-5 2019-10-08 [1] CRAN (R 3.6.2) #> usethis 1.5.1 2019-07-04 [1] CRAN (R 3.6.2) #> vctrs 0.2.1 2019-12-17 [1] CRAN (R 3.6.2) #> withr 2.1.2 2018-03-15 [1] CRAN (R 3.6.2) #> xfun 0.12 2020-01-13 [1] CRAN (R 3.6.2) #> yaml 2.2.0 2018-07-25 [1] CRAN (R 3.6.2) #> zeallot 0.1.0 2018-01-28 [1] CRAN (R 3.6.2) #> #> [1] /usr/local/lib/R/site-library #> [2] /usr/local/lib/R/library ```

Guess Python install is at fault here...

Robinlovelace commented 4 years ago

Update @jannes-m I forgot about RQGIS 3 which fixes it:

devtools::install_github("jannes-m/RQGIS3") library(sf) library(raster) library(RQGIS3) set_env(dev = FALSE) data("incongruent", "aggregating_zones", package = "spData") incongr_wgs = st_transform(incongruent, 4326) open_app()

find_algorithms("union", name_only = TRUE)

Robinlovelace commented 4 years ago

Update, I get another unexpected minor error here continuing with RQGIS3:

alg = "qgis:union"
open_help(alg)
# Error in open_help(alg) : The specified algorithm qgis:union does not exist.

But the next line works:

get_usage(alg)
Union (native:union)

This algorithm checks overlaps between features within the Input layer and creates separate features for overlapping and non-overlapping parts. The area of overlap will create as many identical overlapping features as there are features that participate in that overlap.

An Overlay layer can also be used
in which case features from each layer are split at their overlap with features from the other one
creating a layer containing all the portions from both Input and Overlay layers. The attribute table of the Union layer is filled with attribute values from the respective original layer for non-overlapping features
and attribute values from both layers for overlapping features.

----------------
Input parameters
----------------

INPUT: Input layer

    Parameter type: QgsProcessingParameterFeatureSource

    Accepted data types:
        - str: layer ID
        - str: layer name
        - str: layer source
        - QgsProcessingFeatureSourceDefinition
        - QgsProperty
        - QgsVectorLayer

OVERLAY: Overlay layer

    Parameter type: QgsProcessingParameterFeatureSource

    Accepted data types:
        - str: layer ID
        - str: layer name
        - str: layer source
        - QgsProcessingFeatureSourceDefinition
        - QgsProperty
        - QgsVectorLayer

OUTPUT: Union

    Parameter type: QgsProcessingParameterFeatureSink

    Accepted data types:
        - str: destination vector file
e.g. d:/test.shp
        - str: memory: to store result in temporary memory layer
        - str: using vector provider ID prefix and destination URI
e.g. postgres:... to store result in PostGIS table
        - QgsProcessingOutputLayerDefinition
        - QgsProperty

----------------
Outputs
----------------

OUTPUT:  <QgsProcessingOutputVectorLayer>
    Union
Robinlovelace commented 4 years ago

Update, this fixes it:

alg = "native:union"
Robinlovelace commented 4 years ago

But then this fails:

union = run_qgis("native:union", INPUT = incongr_wgs, INPUT2 = aggzone_wgs, 
                 OUTPUT = file.path(tempdir(), "union.shp"),
                 load_output = TRUE)

Error in pass_args(alg, ..., params = params, NA_flag = NA_flag, qgis_env = qgis_env) : 'INPUT2' is/are (an) invalid function argument(s). 'native:union' allows following function arguments: 'INPUT', 'OVERLAY', 'OUTPUT'
Robinlovelace commented 4 years ago

Fixed by:

union = run_qgis("native:union", INPUT = incongr_wgs, OVERLAY = aggzone_wgs, 
                 OUTPUT = file.path(tempdir(), "union.shp"),
                 load_output = TRUE)
Robinlovelace commented 4 years ago

I feel a PR brewing...

Robinlovelace commented 4 years ago

Another update, this yields nothing:

find_algorithms("sliver", name_only = TRUE)
Robinlovelace commented 4 years ago

Complete list of GIS algorithms on that docker image (no SAGA):

find_algorithms() [1] "Aspect----------------------------------------------->gdal:aspect" [2] "Assign projection------------------------------------>gdal:assignprojection" [3] "Buffer vectors--------------------------------------->gdal:buffervectors" [4] "Build virtual raster--------------------------------->gdal:buildvirtualraster" [5] "Clip raster by extent-------------------------------->gdal:cliprasterbyextent" [6] "Clip raster by mask layer---------------------------->gdal:cliprasterbymasklayer" [7] "Clip vector by extent-------------------------------->gdal:clipvectorbyextent" [8] "Clip vector by mask layer---------------------------->gdal:clipvectorbypolygon" [9] "Color relief----------------------------------------->gdal:colorrelief" [10] "Contour---------------------------------------------->gdal:contour" [11] "Convert format--------------------------------------->gdal:convertformat" [12] "Dissolve--------------------------------------------->gdal:dissolve" [13] "Execute SQL------------------------------------------>gdal:executesql" [14] "Extract projection----------------------------------->gdal:extractprojection" [15] "Fill nodata------------------------------------------>gdal:fillnodata" [16] "gdal2tiles------------------------------------------->gdal:gdal2tiles" [17] "gdal2xyz--------------------------------------------->gdal:gdal2xyz" [18] "Raster information----------------------------------->gdal:gdalinfo" [19] "Grid (Moving average)-------------------------------->gdal:gridaverage" [20] "Grid (Data metrics)---------------------------------->gdal:griddatametrics" [21] "Grid (Inverse distance to a power)------------------->gdal:gridinversedistance" [22] "Grid (IDW with nearest neighbor searching)----------->gdal:gridinversedistancenearestneighbor" [23] "Grid (Linear)---------------------------------------->gdal:gridlinear" [24] "Grid (Nearest neighbor)------------------------------>gdal:gridnearestneighbor" [25] "Hillshade-------------------------------------------->gdal:hillshade" [26] "Export to PostgreSQL (available connections)--------->gdal:importvectorintopostgisdatabaseavailableconnections" [27] "Export to PostgreSQL (new connection)---------------->gdal:importvectorintopostgisdatabasenewconnection" [28] "Merge------------------------------------------------>gdal:merge" [29] "Near black------------------------------------------->gdal:nearblack" [30] "Offset curve----------------------------------------->gdal:offsetcurve" [31] "Vector information----------------------------------->gdal:ogrinfo" [32] "One side buffer-------------------------------------->gdal:onesidebuffer" [33] "Build overviews (pyramids)--------------------------->gdal:overviews" [34] "PCT to RGB------------------------------------------->gdal:pcttorgb" [35] "Points along lines----------------------------------->gdal:pointsalonglines" [36] "Polygonize (raster to vector)------------------------>gdal:polygonize" [37] "Proximity (raster distance)-------------------------->gdal:proximity" [38] "Raster calculator------------------------------------>gdal:rastercalculator" [39] "Rasterize (vector to raster)------------------------->gdal:rasterize" [40] "Rearrange bands-------------------------------------->gdal:rearrange_bands" [41] "Retile----------------------------------------------->gdal:retile" [42] "RGB to PCT------------------------------------------->gdal:rgbtopct" [43] "Roughness-------------------------------------------->gdal:roughness" [44] "Sieve------------------------------------------------>gdal:sieve" [45] "Slope------------------------------------------------>gdal:slope" [46] "Tile index------------------------------------------->gdal:tileindex" [47] "Topographic Position Index (TPI)--------------------->gdal:tpitopographicpositionindex" [48] "Translate (convert format)--------------------------->gdal:translate" [49] "Terrain Ruggedness Index (TRI)----------------------->gdal:triterrainruggednessindex" [50] "Warp (reproject)------------------------------------->gdal:warpreproject" [51] "i.albedo--------------------------------------------->grass7:i.albedo" [52] "i.aster.toar----------------------------------------->grass7:i.aster.toar" [53] "i.atcorr--------------------------------------------->grass7:i.atcorr" [54] "i.biomass-------------------------------------------->grass7:i.biomass" [55] "i.cca------------------------------------------------>grass7:i.cca" [56] "i.cluster-------------------------------------------->grass7:i.cluster" [57] "i.colors.enhance------------------------------------->grass7:i.colors.enhance" [58] "i.eb.eta--------------------------------------------->grass7:i.eb.eta" [59] "i.eb.evapfr------------------------------------------>grass7:i.eb.evapfr" [60] "i.eb.hsebal01.coords--------------------------------->grass7:i.eb.hsebal01.coords" [61] "i.eb.netrad------------------------------------------>grass7:i.eb.netrad" [62] "i.eb.soilheatflux------------------------------------>grass7:i.eb.soilheatflux" [63] "i.emissivity----------------------------------------->grass7:i.emissivity" [64] "i.evapo.mh------------------------------------------->grass7:i.evapo.mh" [65] "i.evapo.pm------------------------------------------->grass7:i.evapo.pm" [66] "i.evapo.pt------------------------------------------->grass7:i.evapo.pt" [67] "i.evapo.time----------------------------------------->grass7:i.evapo.time" [68] "i.fft------------------------------------------------>grass7:i.fft" [69] "i.gensig--------------------------------------------->grass7:i.gensig" [70] "i.gensigset------------------------------------------>grass7:i.gensigset" [71] "i.group---------------------------------------------->grass7:i.group" [72] "i.his.rgb-------------------------------------------->grass7:i.his.rgb" [73] "i.ifft----------------------------------------------->grass7:i.ifft" [74] "i.image.mosaic--------------------------------------->grass7:i.image.mosaic" [75] "i.in.spotvgt----------------------------------------->grass7:i.in.spotvgt" [76] "i.landsat.acca--------------------------------------->grass7:i.landsat.acca" [77] "i.landsat.toar--------------------------------------->grass7:i.landsat.toar" [78] "i.maxlik--------------------------------------------->grass7:i.maxlik" [79] "i.modis.qc------------------------------------------->grass7:i.modis.qc" [80] "i.oif------------------------------------------------>grass7:i.oif" [81] "i.pansharpen----------------------------------------->grass7:i.pansharpen" [82] "i.pca------------------------------------------------>grass7:i.pca" [83] "i.rgb.his-------------------------------------------->grass7:i.rgb.his" [84] "i.segment-------------------------------------------->grass7:i.segment" [85] "i.smap----------------------------------------------->grass7:i.smap" [86] "i.tasscap-------------------------------------------->grass7:i.tasscap" [87] "i.topo.coor.ill-------------------------------------->grass7:i.topo.coor.ill" [88] "i.topo.corr------------------------------------------>grass7:i.topo.corr" [89] "i.vi------------------------------------------------->grass7:i.vi" [90] "i.zc------------------------------------------------->grass7:i.zc" [91] "m.cogo----------------------------------------------->grass7:m.cogo" [92] "nviz------------------------------------------------->grass7:nviz" [93] "r.basins.fill---------------------------------------->grass7:r.basins.fill" [94] "r.blend.combine-------------------------------------->grass7:r.blend.combine" [95] "r.blend.rgb------------------------------------------>grass7:r.blend.rgb" [96] "r.buffer--------------------------------------------->grass7:r.buffer" [97] "r.buffer.lowmem-------------------------------------->grass7:r.buffer.lowmem" [98] "r.carve---------------------------------------------->grass7:r.carve" [99] "r.category------------------------------------------->grass7:r.category" [100] "r.category.out--------------------------------------->grass7:r.category.out" [101] "r.circle--------------------------------------------->grass7:r.circle" [102] "r.clump---------------------------------------------->grass7:r.clump" [103] "r.coin----------------------------------------------->grass7:r.coin" [104] "r.colors--------------------------------------------->grass7:r.colors" [105] "r.colors.out----------------------------------------->grass7:r.colors.out" [106] "r.colors.stddev-------------------------------------->grass7:r.colors.stddev" [107] "r.composite------------------------------------------>grass7:r.composite" [108] "r.contour-------------------------------------------->grass7:r.contour" [109] "r.cost----------------------------------------------->grass7:r.cost" [110] "r.covar---------------------------------------------->grass7:r.covar" [111] "r.cross---------------------------------------------->grass7:r.cross" [112] "r.describe------------------------------------------->grass7:r.describe" [113] "r.distance------------------------------------------->grass7:r.distance" [114] "r.drain---------------------------------------------->grass7:r.drain" [115] "r.fill.dir------------------------------------------->grass7:r.fill.dir" [116] "r.fill.stats----------------------------------------->grass7:r.fill.stats" [117] "r.fillnulls------------------------------------------>grass7:r.fillnulls" [118] "r.flow----------------------------------------------->grass7:r.flow" [119] "r.grow----------------------------------------------->grass7:r.grow" [120] "r.grow.distance-------------------------------------->grass7:r.grow.distance" [121] "r.gwflow--------------------------------------------->grass7:r.gwflow" [122] "r.his------------------------------------------------>grass7:r.his" [123] "r.horizon-------------------------------------------->grass7:r.horizon" [124] "r.horizon.height------------------------------------->grass7:r.horizon.height" [125] "r.in.lidar------------------------------------------->grass7:r.in.lidar" [126] "r.in.lidar.info-------------------------------------->grass7:r.in.lidar.info" [127] "r.info----------------------------------------------->grass7:r.info" [128] "r.kappa---------------------------------------------->grass7:r.kappa" [129] "r.lake----------------------------------------------->grass7:r.lake" [130] "r.latlong-------------------------------------------->grass7:r.latlong" [131] "r.li.cwed-------------------------------------------->grass7:r.li.cwed" [132] "r.li.cwed.ascii-------------------------------------->grass7:r.li.cwed.ascii" [133] "r.li.dominance--------------------------------------->grass7:r.li.dominance" [134] "r.li.dominance.ascii--------------------------------->grass7:r.li.dominance.ascii" [135] "r.li.edgedensity------------------------------------->grass7:r.li.edgedensity" [136] "r.li.edgedensity.ascii------------------------------->grass7:r.li.edgedensity.ascii" [137] "r.li.mpa--------------------------------------------->grass7:r.li.mpa" [138] "r.li.mpa.ascii--------------------------------------->grass7:r.li.mpa.ascii" [139] "r.li.mps--------------------------------------------->grass7:r.li.mps" [140] "r.li.mps.ascii--------------------------------------->grass7:r.li.mps.ascii" [141] "r.li.padcv------------------------------------------->grass7:r.li.padcv" [142] "r.li.padcv.ascii------------------------------------->grass7:r.li.padcv.ascii" [143] "r.li.padrange---------------------------------------->grass7:r.li.padrange" [144] "r.li.padrange.ascii---------------------------------->grass7:r.li.padrange.ascii" [145] "r.li.padsd------------------------------------------->grass7:r.li.padsd" [146] "r.li.padsd.ascii------------------------------------->grass7:r.li.padsd.ascii" [147] "r.li.patchdensity------------------------------------>grass7:r.li.patchdensity" [148] "r.li.patchdensity.ascii------------------------------>grass7:r.li.patchdensity.ascii" [149] "r.li.patchnum---------------------------------------->grass7:r.li.patchnum" [150] "r.li.patchnum.ascii---------------------------------->grass7:r.li.patchnum.ascii" [151] "r.li.pielou------------------------------------------>grass7:r.li.pielou" [152] "r.li.pielou.ascii------------------------------------>grass7:r.li.pielou.ascii" [153] "r.li.renyi------------------------------------------->grass7:r.li.renyi" [154] "r.li.renyi.ascii------------------------------------->grass7:r.li.renyi.ascii" [155] "r.li.richness---------------------------------------->grass7:r.li.richness" [156] "r.li.richness.ascii---------------------------------->grass7:r.li.richness.ascii" [157] "r.li.shannon----------------------------------------->grass7:r.li.shannon" [158] "r.li.shannon.ascii----------------------------------->grass7:r.li.shannon.ascii" [159] "r.li.shape------------------------------------------->grass7:r.li.shape" [160] "r.li.shape.ascii------------------------------------->grass7:r.li.shape.ascii" [161] "r.li.simpson----------------------------------------->grass7:r.li.simpson" [162] "r.li.simpson.ascii----------------------------------->grass7:r.li.simpson.ascii" [163] "r.mapcalc.simple------------------------------------->grass7:r.mapcalc.simple" [164] "r.mask.rast------------------------------------------>grass7:r.mask.rast" [165] "r.mask.vect------------------------------------------>grass7:r.mask.vect" [166] "r.mfilter-------------------------------------------->grass7:r.mfilter" [167] "r.mode----------------------------------------------->grass7:r.mode" [168] "r.neighbors------------------------------------------>grass7:r.neighbors" [169] "r.null----------------------------------------------->grass7:r.null" [170] "r.out.ascii------------------------------------------>grass7:r.out.ascii" [171] "r.out.gridatb---------------------------------------->grass7:r.out.gridatb" [172] "r.out.mat-------------------------------------------->grass7:r.out.mat" [173] "r.out.mpeg------------------------------------------->grass7:r.out.mpeg" [174] "r.out.png-------------------------------------------->grass7:r.out.png" [175] "r.out.pov-------------------------------------------->grass7:r.out.pov" [176] "r.out.ppm-------------------------------------------->grass7:r.out.ppm" [177] "r.out.ppm3------------------------------------------->grass7:r.out.ppm3" [178] "r.out.vrml------------------------------------------->grass7:r.out.vrml" [179] "r.out.vtk-------------------------------------------->grass7:r.out.vtk" [180] "r.out.xyz-------------------------------------------->grass7:r.out.xyz" [181] "r.param.scale---------------------------------------->grass7:r.param.scale" [182] "r.patch---------------------------------------------->grass7:r.patch" [183] "r.plane---------------------------------------------->grass7:r.plane" [184] "r.profile-------------------------------------------->grass7:r.profile" [185] "r.proj----------------------------------------------->grass7:r.proj" [186] "r.quant---------------------------------------------->grass7:r.quant" [187] "r.quantile------------------------------------------->grass7:r.quantile" [188] "r.random--------------------------------------------->grass7:r.random" [189] "r.random.cells--------------------------------------->grass7:r.random.cells" [190] "r.random.surface------------------------------------->grass7:r.random.surface" [191] "r.reclass-------------------------------------------->grass7:r.reclass" [192] "r.reclass.area--------------------------------------->grass7:r.reclass.area" [193] "r.recode--------------------------------------------->grass7:r.recode" [194] "r.regression.line------------------------------------>grass7:r.regression.line" [195] "r.regression.multi----------------------------------->grass7:r.regression.multi" [196] "r.relief--------------------------------------------->grass7:r.relief" [197] "r.relief.scaling------------------------------------->grass7:r.relief.scaling" [198] "r.report--------------------------------------------->grass7:r.report" [199] "r.resamp.bspline------------------------------------->grass7:r.resamp.bspline" [200] "r.resamp.filter-------------------------------------->grass7:r.resamp.filter" [201] "r.resamp.interp-------------------------------------->grass7:r.resamp.interp" [202] "r.resamp.rst----------------------------------------->grass7:r.resamp.rst" [203] "r.resamp.stats--------------------------------------->grass7:r.resamp.stats" [204] "r.resample------------------------------------------->grass7:r.resample" [205] "r.rescale-------------------------------------------->grass7:r.rescale" [206] "r.rescale.eq----------------------------------------->grass7:r.rescale.eq" [207] "r.rgb------------------------------------------------>grass7:r.rgb" [208] "r.ros------------------------------------------------>grass7:r.ros" [209] "r.series--------------------------------------------->grass7:r.series" [210] "r.series.accumulate---------------------------------->grass7:r.series.accumulate" [211] "r.series.interp-------------------------------------->grass7:r.series.interp" [212] "r.shade---------------------------------------------->grass7:r.shade" [213] "r.sim.sediment--------------------------------------->grass7:r.sim.sediment" [214] "r.sim.water------------------------------------------>grass7:r.sim.water" [215] "r.slope.aspect--------------------------------------->grass7:r.slope.aspect" [216] "r.solute.transport----------------------------------->grass7:r.solute.transport" [217] "r.spread--------------------------------------------->grass7:r.spread" [218] "r.spreadpath----------------------------------------->grass7:r.spreadpath" [219] "r.statistics----------------------------------------->grass7:r.statistics" [220] "r.stats---------------------------------------------->grass7:r.stats" [221] "r.stats.quantile.out--------------------------------->grass7:r.stats.quantile.out" [222] "r.stats.quantile.rast-------------------------------->grass7:r.stats.quantile.rast" [223] "r.stats.zonal---------------------------------------->grass7:r.stats.zonal" [224] "r.stream.extract------------------------------------->grass7:r.stream.extract" [225] "r.sun.incidout--------------------------------------->grass7:r.sun.incidout" [226] "r.sun.insoltime-------------------------------------->grass7:r.sun.insoltime" [227] "r.sunhours------------------------------------------->grass7:r.sunhours" [228] "r.sunmask.datetime----------------------------------->grass7:r.sunmask.datetime" [229] "r.sunmask.position----------------------------------->grass7:r.sunmask.position" [230] "r.surf.area------------------------------------------>grass7:r.surf.area" [231] "r.surf.contour--------------------------------------->grass7:r.surf.contour" [232] "r.surf.fractal--------------------------------------->grass7:r.surf.fractal" [233] "r.surf.gauss----------------------------------------->grass7:r.surf.gauss" [234] "r.surf.idw------------------------------------------->grass7:r.surf.idw" [235] "r.surf.random---------------------------------------->grass7:r.surf.random" [236] "r.terraflow------------------------------------------>grass7:r.terraflow" [237] "r.texture-------------------------------------------->grass7:r.texture" [238] "r.thin----------------------------------------------->grass7:r.thin" [239] "r.tile----------------------------------------------->grass7:r.tile" [240] "r.tileset-------------------------------------------->grass7:r.tileset" [241] "r.to.vect-------------------------------------------->grass7:r.to.vect" [242] "r.topidx--------------------------------------------->grass7:r.topidx" [243] "r.topmodel------------------------------------------->grass7:r.topmodel" [244] "r.topmodel.topidxstats------------------------------->grass7:r.topmodel.topidxstats" [245] "r.transect------------------------------------------->grass7:r.transect" [246] "r.univar--------------------------------------------->grass7:r.univar" [247] "r.uslek---------------------------------------------->grass7:r.uslek" [248] "r.usler---------------------------------------------->grass7:r.usler" [249] "r.viewshed------------------------------------------->grass7:r.viewshed" [250] "r.volume--------------------------------------------->grass7:r.volume" [251] "r.walk.coords---------------------------------------->grass7:r.walk.coords" [252] "r.walk.points---------------------------------------->grass7:r.walk.points" [253] "r.walk.rast------------------------------------------>grass7:r.walk.rast" [254] "r.water.outlet--------------------------------------->grass7:r.water.outlet" [255] "r.watershed------------------------------------------>grass7:r.watershed" [256] "r.what.color----------------------------------------->grass7:r.what.color" [257] "r.what.coords---------------------------------------->grass7:r.what.coords" [258] "r.what.points---------------------------------------->grass7:r.what.points" [259] "v.buffer--------------------------------------------->grass7:v.buffer" [260] "v.build.check---------------------------------------->grass7:v.build.check" [261] "v.build.polylines------------------------------------>grass7:v.build.polylines" [262] "v.class---------------------------------------------->grass7:v.class" [263] "v.clean---------------------------------------------->grass7:v.clean" [264] "v.cluster-------------------------------------------->grass7:v.cluster" [265] "v.db.select------------------------------------------>grass7:v.db.select" [266] "v.decimate------------------------------------------->grass7:v.decimate" [267] "v.delaunay------------------------------------------->grass7:v.delaunay" [268] "v.dissolve------------------------------------------->grass7:v.dissolve" [269] "v.distance------------------------------------------->grass7:v.distance" [270] "v.drape---------------------------------------------->grass7:v.drape" [271] "v.edit----------------------------------------------->grass7:v.edit" [272] "v.extract-------------------------------------------->grass7:v.extract" [273] "v.extrude-------------------------------------------->grass7:v.extrude" [274] "v.generalize----------------------------------------->grass7:v.generalize" [275] "v.hull----------------------------------------------->grass7:v.hull" [276] "v.in.ascii------------------------------------------->grass7:v.in.ascii" [277] "v.in.dxf--------------------------------------------->grass7:v.in.dxf" [278] "v.in.e00--------------------------------------------->grass7:v.in.e00" [279] "v.in.geonames---------------------------------------->grass7:v.in.geonames" [280] "v.in.lidar------------------------------------------->grass7:v.in.lidar" [281] "v.in.lines------------------------------------------->grass7:v.in.lines" [282] "v.in.mapgen------------------------------------------>grass7:v.in.mapgen" [283] "v.in.wfs--------------------------------------------->grass7:v.in.wfs" [284] "v.info----------------------------------------------->grass7:v.info" [285] "v.kcv------------------------------------------------>grass7:v.kcv" [286] "v.kernel.rast---------------------------------------->grass7:v.kernel.rast" [287] "v.kernel.vector-------------------------------------->grass7:v.kernel.vector" [288] "v.lidar.correction----------------------------------->grass7:v.lidar.correction" [289] "v.lidar.edgedetection-------------------------------->grass7:v.lidar.edgedetection" [290] "v.lidar.growing-------------------------------------->grass7:v.lidar.growing" [291] "v.mkgrid--------------------------------------------->grass7:v.mkgrid" [292] "v.neighbors------------------------------------------>grass7:v.neighbors" [293] "v.net------------------------------------------------>grass7:v.net" [294] "v.net.alloc------------------------------------------>grass7:v.net.alloc" [295] "v.net.allpairs--------------------------------------->grass7:v.net.allpairs" [296] "v.net.bridge----------------------------------------->grass7:v.net.bridge" [297] "v.net.centrality------------------------------------->grass7:v.net.centrality" [298] "v.net.components------------------------------------->grass7:v.net.components" [299] "v.net.connectivity----------------------------------->grass7:v.net.connectivity" [300] "v.net.distance--------------------------------------->grass7:v.net.distance" [301] "v.net.flow------------------------------------------->grass7:v.net.flow" [302] "v.net.iso-------------------------------------------->grass7:v.net.iso" [303] "v.net.nreport---------------------------------------->grass7:v.net.nreport" [304] "v.net.path------------------------------------------->grass7:v.net.path" [305] "v.net.report----------------------------------------->grass7:v.net.report" [306] "v.net.salesman--------------------------------------->grass7:v.net.salesman" [307] "v.net.spanningtree----------------------------------->grass7:v.net.spanningtree" [308] "v.net.steiner---------------------------------------->grass7:v.net.steiner" [309] "v.net.timetable-------------------------------------->grass7:v.net.timetable" [310] "v.net.visibility------------------------------------->grass7:v.net.visibility" [311] "v.normal--------------------------------------------->grass7:v.normal" [312] "v.out.ascii------------------------------------------>grass7:v.out.ascii" [313] "v.out.dxf-------------------------------------------->grass7:v.out.dxf" [314] "v.out.postgis---------------------------------------->grass7:v.out.postgis" [315] "v.out.pov-------------------------------------------->grass7:v.out.pov" [316] "v.out.svg-------------------------------------------->grass7:v.out.svg" [317] "v.out.vtk-------------------------------------------->grass7:v.out.vtk" [318] "v.outlier-------------------------------------------->grass7:v.outlier" [319] "v.overlay-------------------------------------------->grass7:v.overlay" [320] "v.pack----------------------------------------------->grass7:v.pack" [321] "v.parallel------------------------------------------->grass7:v.parallel" [322] "v.patch---------------------------------------------->grass7:v.patch" [323] "v.perturb-------------------------------------------->grass7:v.perturb" [324] "v.proj----------------------------------------------->grass7:v.proj" [325] "v.qcount--------------------------------------------->grass7:v.qcount" [326] "v.random--------------------------------------------->grass7:v.random" [327] "v.rast.stats----------------------------------------->grass7:v.rast.stats" [328] "v.reclass-------------------------------------------->grass7:v.reclass" [329] "v.rectify-------------------------------------------->grass7:v.rectify" [330] "v.report--------------------------------------------->grass7:v.report" [331] "v.sample--------------------------------------------->grass7:v.sample" [332] "v.segment-------------------------------------------->grass7:v.segment" [333] "v.select--------------------------------------------->grass7:v.select" [334] "v.split---------------------------------------------->grass7:v.split" [335] "v.surf.bspline--------------------------------------->grass7:v.surf.bspline" [336] "v.surf.idw------------------------------------------->grass7:v.surf.idw" [337] "v.surf.rst------------------------------------------->grass7:v.surf.rst" [338] "v.surf.rst.cvdev------------------------------------->grass7:v.surf.rst.cvdev" [339] "v.to.3d---------------------------------------------->grass7:v.to.3d" [340] "v.to.lines------------------------------------------->grass7:v.to.lines" [341] "v.to.points------------------------------------------>grass7:v.to.points" [342] "v.to.rast-------------------------------------------->grass7:v.to.rast" [343] "v.transform------------------------------------------>grass7:v.transform" [344] "v.type----------------------------------------------->grass7:v.type" [345] "v.univar--------------------------------------------->grass7:v.univar" [346] "v.vect.stats----------------------------------------->grass7:v.vect.stats" [347] "v.voronoi-------------------------------------------->grass7:v.voronoi" [348] "v.what.rast------------------------------------------>grass7:v.what.rast" [349] "v.what.vect------------------------------------------>grass7:v.what.vect" [350] "Add autoincremental field---------------------------->native:addautoincrementalfield" [351] "Add unique value index field------------------------->native:adduniquevalueindexfield" [352] "Array of offset (parallel) lines--------------------->native:arrayoffsetlines" [353] "Array of translated features------------------------->native:arraytranslatedfeatures" [354] "Assign projection------------------------------------>native:assignprojection" [355] "Boundary--------------------------------------------->native:boundary" [356] "Bounding boxes--------------------------------------->native:boundingboxes" [357] "Buffer----------------------------------------------->native:buffer" [358] "Variable width buffer (by m-value)------------------->native:bufferbym" [359] "Create categorized renderer from styles-------------->native:categorizeusingstyle" [360] "Centroids-------------------------------------------->native:centroids" [361] "Clip------------------------------------------------->native:clip" [362] "Collect geometries----------------------------------->native:collect" [363] "Convex hull------------------------------------------>native:convexhull" [364] "DBSCAN clustering------------------------------------>native:dbscanclustering" [365] "Delete holes----------------------------------------->native:deleteholes" [366] "Difference------------------------------------------->native:difference" [367] "Dissolve--------------------------------------------->native:dissolve" [368] "Drop geometries-------------------------------------->native:dropgeometries" [369] "Drop M/Z values-------------------------------------->native:dropmzvalues" [370] "Explode lines---------------------------------------->native:explodelines" [371] "Extend lines----------------------------------------->native:extendlines" [372] "Create layer from extent----------------------------->native:extenttolayer" [373] "Extract by attribute--------------------------------->native:extractbyattribute" [374] "Extract by expression-------------------------------->native:extractbyexpression" [375] "Extract/clip by extent------------------------------->native:extractbyextent" [376] "Extract by location---------------------------------->native:extractbylocation" [377] "Extract vertices------------------------------------->native:extractvertices" [378] "Download file---------------------------------------->native:filedownloader" [379] "Feature Filter--------------------------------------->native:filter" [380] "Filter vertices by m value--------------------------->native:filterverticesbym" [381] "Filter vertices by z value--------------------------->native:filterverticesbyz" [382] "Fix geometries--------------------------------------->native:fixgeometries" [383] "Join by lines (hub lines)---------------------------->native:hublines" [384] "Import geotagged photos------------------------------>native:importphotos" [385] "Interpolate point on line---------------------------->native:interpolatepoint" [386] "Intersection----------------------------------------->native:intersection" [387] "Join attributes by field value----------------------->native:joinattributestable" [388] "K-means clustering----------------------------------->native:kmeansclustering" [389] "Line intersections----------------------------------->native:lineintersections" [390] "Line substring--------------------------------------->native:linesubstring" [391] "Load layer into project------------------------------>native:loadlayer" [392] "Mean coordinate(s)----------------------------------->native:meancoordinates" [393] "Merge lines------------------------------------------>native:mergelines" [394] "Merge vector layers---------------------------------->native:mergevectorlayers" [395] "Minimum enclosing circles---------------------------->native:minimumenclosingcircle" [396] "Multipart to singleparts----------------------------->native:multiparttosingleparts" [397] "Multi-ring buffer (constant distance)---------------->native:multiringconstantbuffer" [398] "Offset lines----------------------------------------->native:offsetline" [399] "Order by expression---------------------------------->native:orderbyexpression" [400] "Oriented minimum bounding box------------------------>native:orientedminimumboundingbox" [401] "Package layers--------------------------------------->native:package" [402] "Raster pixels to points------------------------------>native:pixelstopoints" [403] "Raster pixels to polygons---------------------------->native:pixelstopolygons" [404] "Point on surface------------------------------------->native:pointonsurface" [405] "Project points (Cartesian)--------------------------->native:projectpointcartesian" [406] "Promote to multipart--------------------------------->native:promotetomulti" [407] "Raster layer unique values report-------------------->native:rasterlayeruniquevaluesreport" [408] "Reclassify by layer---------------------------------->native:reclassifybylayer" [409] "Reclassify by table---------------------------------->native:reclassifybytable" [410] "Remove duplicate vertices---------------------------->native:removeduplicatevertices" [411] "Remove null geometries------------------------------->native:removenullgeometries" [412] "Rename layer----------------------------------------->native:renamelayer" [413] "Reproject layer-------------------------------------->native:reprojectlayer" [414] "Reverse line direction------------------------------->native:reverselinedirection" [415] "Rotate----------------------------------------------->native:rotatefeatures" [416] "Extract selected features---------------------------->native:saveselectedfeatures" [417] "Segmentize by maximum angle-------------------------->native:segmentizebymaxangle" [418] "Segmentize by maximum distance----------------------->native:segmentizebymaxdistance" [419] "Select by location----------------------------------->native:selectbylocation" [420] "Set m-value from raster------------------------------>native:setmfromraster" [421] "Drape (set z-value from raster)---------------------->native:setzfromraster" [422] "Shortest path (layer to point)----------------------->native:shortestpathlayertopoint" [423] "Shortest path (point to layer)----------------------->native:shortestpathpointtolayer" [424] "Shortest path (point to point)----------------------->native:shortestpathpointtopoint" [425] "Simplify--------------------------------------------->native:simplifygeometries" [426] "Smooth----------------------------------------------->native:smoothgeometry" [427] "Snap points to grid---------------------------------->native:snappointstogrid" [428] "Split with lines------------------------------------->native:splitwithlines" [429] "String concatenation--------------------------------->native:stringconcatenation" [430] "Subdivide-------------------------------------------->native:subdivide" [431] "Swap X and Y coordinates----------------------------->native:swapxy" [432] "Symmetrical difference------------------------------->native:symmetricaldifference" [433] "Tapered buffers-------------------------------------->native:taperedbuffer" [434] "Transect--------------------------------------------->native:transect" [435] "Translate-------------------------------------------->native:translategeometry" [436] "Union------------------------------------------------>native:union" [437] "Create wedge buffers--------------------------------->native:wedgebuffers" [438] "Zonal histogram-------------------------------------->native:zonalhistogram" [439] "Add field to attributes table------------------------>qgis:addfieldtoattributestable" [440] "Advanced Python field calculator--------------------->qgis:advancedpythonfieldcalculator" [441] "Aggregate-------------------------------------------->qgis:aggregate" [442] "Aspect----------------------------------------------->qgis:aspect" [443] "Bar plot--------------------------------------------->qgis:barplot" [444] "Basic statistics for fields-------------------------->qgis:basicstatisticsforfields" [445] "Box plot--------------------------------------------->qgis:boxplot" [446] "Build virtual vector--------------------------------->qgis:buildvirtualvector" [447] "Check validity--------------------------------------->qgis:checkvalidity" [448] "Concave hull (alpha shapes)-------------------------->qgis:concavehull" [449] "Convert geometry type-------------------------------->qgis:convertgeometrytype" [450] "Count points in polygon------------------------------>qgis:countpointsinpolygon" [451] "Create attribute index------------------------------->qgis:createattributeindex" [452] "Create constant raster layer------------------------->qgis:createconstantrasterlayer" [453] "Create grid------------------------------------------>qgis:creategrid" [454] "Create points layer from table----------------------->qgis:createpointslayerfromtable" [455] "Create spatial index--------------------------------->qgis:createspatialindex" [456] "Define layer projection------------------------------>qgis:definecurrentprojection" [457] "Delaunay triangulation------------------------------->qgis:delaunaytriangulation" [458] "Drop field(s)---------------------------------------->qgis:deletecolumn" [459] "Delete duplicate geometries-------------------------->qgis:deleteduplicategeometries" [460] "Densify by count------------------------------------->qgis:densifygeometries" [461] "Densify by interval---------------------------------->qgis:densifygeometriesgivenaninterval" [462] "Distance matrix-------------------------------------->qgis:distancematrix" [463] "Distance to nearest hub (line to hub)---------------->qgis:distancetonearesthublinetohub" [464] "Distance to nearest hub (points)--------------------->qgis:distancetonearesthubpoints" [465] "Eliminate selected polygons-------------------------->qgis:eliminateselectedpolygons" [466] "Execute SQL------------------------------------------>qgis:executesql" [467] "Add geometry attributes------------------------------>qgis:exportaddgeometrycolumns" [468] "Extract specific vertices---------------------------->qgis:extractspecificvertices" [469] "Field calculator------------------------------------->qgis:fieldcalculator" [470] "Find projection-------------------------------------->qgis:findprojection" [471] "Generate points (pixel centroids) along line--------->qgis:generatepointspixelcentroidsalongline" [472] "Generate points (pixel centroids) inside polygons---->qgis:generatepointspixelcentroidsinsidepolygons" [473] "Geometry by expression------------------------------->qgis:geometrybyexpression" [474] "Heatmap (Kernel Density Estimation)------------------>qgis:heatmapkerneldensityestimation" [475] "Hillshade-------------------------------------------->qgis:hillshade" [476] "Hypsometric curves----------------------------------->qgis:hypsometriccurves" [477] "IDW interpolation------------------------------------>qgis:idwinterpolation" [478] "Export to PostgreSQL--------------------------------->qgis:importintopostgis" [479] "Export to SpatiaLite--------------------------------->qgis:importintospatialite" [480] "Join attributes by location-------------------------->qgis:joinattributesbylocation" [481] "Join attributes by location (summary)---------------->qgis:joinbylocationsummary" [482] "Keep N biggest parts--------------------------------->qgis:keepnbiggestparts" [483] "Concave hull (k-nearest neighbor)-------------------->qgis:knearestconcavehull" [484] "Lines to polygons------------------------------------>qgis:linestopolygons" [485] "List unique values----------------------------------->qgis:listuniquevalues" [486] "Mean and standard deviation plot--------------------->qgis:meanandstandarddeviationplot" [487] "Minimum bounding geometry---------------------------->qgis:minimumboundinggeometry" [488] "Nearest neighbour analysis--------------------------->qgis:nearestneighbouranalysis" [489] "Orthogonalize---------------------------------------->qgis:orthogonalize" [490] "Points along geometry-------------------------------->qgis:pointsalonglines" [491] "Points displacement---------------------------------->qgis:pointsdisplacement" [492] "Points to path--------------------------------------->qgis:pointstopath" [493] "Polar plot------------------------------------------->qgis:polarplot" [494] "Pole of inaccessibility------------------------------>qgis:poleofinaccessibility" [495] "Extract layer extent--------------------------------->qgis:polygonfromlayerextent" [496] "Polygonize------------------------------------------->qgis:polygonize" [497] "Polygons to lines------------------------------------>qgis:polygonstolines" [498] "PostgreSQL execute and load SQL---------------------->qgis:postgisexecuteandloadsql" [499] "PostgreSQL execute SQL------------------------------->qgis:postgisexecutesql" [500] "Random extract--------------------------------------->qgis:randomextract" [501] "Random extract within subsets------------------------>qgis:randomextractwithinsubsets" [502] "Random points along line----------------------------->qgis:randompointsalongline" [503] "Random points in extent------------------------------>qgis:randompointsinextent" [504] "Random points in layer bounds------------------------>qgis:randompointsinlayerbounds" [505] "Random points inside polygons------------------------>qgis:randompointsinsidepolygons" [506] "Random selection------------------------------------->qgis:randomselection" [507] "Random selection within subsets---------------------->qgis:randomselectionwithinsubsets" [508] "Raster calculator------------------------------------>qgis:rastercalculator" [509] "Convert map to raster-------------------------------->qgis:rasterize" [510] "Raster layer histogram------------------------------->qgis:rasterlayerhistogram" [511] "Raster layer statistics------------------------------>qgis:rasterlayerstatistics" [512] "Sample raster values--------------------------------->qgis:rastersampling" [513] "Rectangles, ovals, diamonds (fixed)------------------>qgis:rectanglesovalsdiamondsfixed" [514] "Rectangles, ovals, diamonds (variable)--------------->qgis:rectanglesovalsdiamondsvariable" [515] "Refactor fields-------------------------------------->qgis:refactorfields" [516] "Regular points--------------------------------------->qgis:regularpoints" [517] "Relief----------------------------------------------->qgis:relief" [518] "Ruggedness index------------------------------------->qgis:ruggednessindex" [519] "Vector layer scatterplot 3D-------------------------->qgis:scatter3dplot" [520] "Select by attribute---------------------------------->qgis:selectbyattribute" [521] "Select by expression--------------------------------->qgis:selectbyexpression" [522] "Service area (from layer)---------------------------->qgis:serviceareafromlayer" [523] "Service area (from point)---------------------------->qgis:serviceareafrompoint" [524] "Set M value------------------------------------------>qgis:setmvalue" [525] "Set style for raster layer--------------------------->qgis:setstyleforrasterlayer" [526] "Set style for vector layer--------------------------->qgis:setstyleforvectorlayer" [527] "Set Z value------------------------------------------>qgis:setzvalue" [528] "Single sided buffer---------------------------------->qgis:singlesidedbuffer" [529] "Slope------------------------------------------------>qgis:slope" [530] "Snap geometries to layer----------------------------->qgis:snapgeometries" [531] "SpatiaLite execute SQL------------------------------->qgis:spatialiteexecutesql" [532] "Split vector layer----------------------------------->qgis:splitvectorlayer" [533] "Statistics by categories----------------------------->qgis:statisticsbycategories" [534] "Sum line lengths------------------------------------->qgis:sumlinelengths" [535] "Text to float---------------------------------------->qgis:texttofloat" [536] "TIN interpolation------------------------------------>qgis:tininterpolation" [537] "Topological coloring--------------------------------->qgis:topologicalcoloring" [538] "Truncate table--------------------------------------->qgis:truncatetable" [539] "Variable distance buffer----------------------------->qgis:variabledistancebuffer" [540] "Vector layer histogram------------------------------->qgis:vectorlayerhistogram" [541] "Vector layer scatterplot----------------------------->qgis:vectorlayerscatterplot" [542] "Voronoi polygons------------------------------------->qgis:voronoipolygons" [543] "Zonal statistics------------------------------------->qgis:zonalstatistics"
jannes-m commented 4 years ago

In fact, I have already started re-writing the R-GIS bridges chapter in a new branch a while ago but then stopped doing so since not all QGIS geoalgorithms I have used in the first edition are also available in QGIS3. At the moment I would rather opt to just take out the RQGIS(3) section in a new edition since there are so many problems with RQGIS3 (RStudio issue on Unix-based systems and starting from QGIS 3.14.13 GRASS and SAGA geoalgorithms are not working any longer, and I have no idea why this is (oth the native QGIS geoalgorithms are still working). And with the twins I am unfortunately missing the time to look for hours and hours in the source code what they might changed in the QGIS API from one version to the next... at least atm this is really difficult.

Robinlovelace commented 4 years ago

How about we leave it as-is and aim to update the section in time for the second edition of the book? It seems likely that upstream developments in QGIS and RStudio may automatically resolve the issues by then in any case...

Robinlovelace commented 3 years ago

Heads-up @jannes-m I just got a message asking when we plan to update this chapter. I vote by end of 2021 is a reasonable aim for hitting the https://github.com/Robinlovelace/geocompr/milestone/7 milestone and possibly even the 2nd edition. On a related note, what are your thoughts on raster @Nowosad, still too early to replace the raster code?

jannes-m commented 3 years ago

I hope I'll find some time during my parental leave in June/July this year to work on the R-GIS bridges chapter. I suppose we have to also rewrite the RSAGA section since RSAGA is no longer maintained (though it might still be working).

Nowosad commented 3 years ago

I have an idea to test different R approaches to raster data during the summer and then decide which one is the best in terms of (a) ease of use, (b) teachability, (c) performance, (d) capabilities. Currently I can see a lot of pros and cons of raster, terra, and stars...

gisma commented 3 years ago

Despite the truly admirable performance of the protagonists, I have been struggling for quite some time in my daily work, both in research and teaching, with (a) the problems of the competing R package concepts, especially of course the terra/raster and stars/sf problems, (b) the hardly comprehensible, say, diversity of the migration of the libraries and reference systems etc. on which r-spatial is based. (e.g. but not only gdal/proj) and (c) the growing difficulties to reliably access the APIs of the big open source software packages (GRASS as well as QGIS and ''SAGA'' anyway).

Scientific work is only possible in reliable production systems under reproducible conditions. Both research and teaching (especially remotely with 20 unknown laptops) are a disaster under these conditions, eaten up by the hassle and frustration of fixing problems on a daily basis. That is a real pity.

In my opinion, the problem exceeds the R-GIS bridges chapter and also what some of us can do as developers in addition to the usual activities. Regarding the textbook, I think you should generally consider whether the bridging chapter can or should be maintained in the future. The work on it will be considerable for the foreseeable future. I'm curious what you have in mind, but maybe it's more important to integrate openEO or similar cloud-oriented concepts instead? The future for most analytics will probably not be on the local workstation.... Anyway if I can support you - gladly.

Robinlovelace commented 3 years ago

Thanks for the insights @gisma, really interesting. Re raster packages my thinking is if in doubt sticking to the more mature stuff (raster in this case) is often safest. It's a question of timing and issues being ironed out I guess. Look forward to insights from @Nowosad on the most efficient (or perhaps least painful) option seems to be.

Ease of use must be a key consideration when remembering that the entire world, including people who have only ever used GUIs, is the target audience. Ease of use partly explains the enduring and IMO justified popularity of the tidyverse.

Re b) and c) could you try the following?

docker run -d -p 8786:8787 -e DISABLE_AUTH=TRUE -v $(pwd):/home/rstudio/geocompr  geocompr/geocompr:qgis

Navigating to http://localhost:8786/ after that incantation I see this (need to add qgisprocess to the docker image but :tada: nonetheless):

image

There's also the qgis-ext image that deserves more prominent mention and which could be a foundation for an update bridges chapter: https://github.com/geocompr/docker/pull/8

Robinlovelace commented 3 years ago

Update on this @gisma this works well, giving 970 algorithms, an embarrassment of riches!

docker run -d -p 8786:8787 -e DISABLE_AUTH=TRUE -v $(pwd):/home/rstudio/geocompr  geocompr/geocompr:qgis-ext
gisma commented 3 years ago

@Robinlovelace i totally agree with you! Thanks for the docker hint. It is downloading.... The docker approach is obviously one of the most promising ways out of the installation and dependencies jungle.

Robinlovelace commented 3 years ago

Closing this for now because it seems to work and, more importantly, it is partly superseded by #519.