--- title: geosapi User Manual output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{geosapi User Manual} %\VignetteEngine{knitr::knitr} \usepackage[utf8]{inputenc} --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` # geosapi - R Interface to GeoServer REST API R Interface to GeoServer REST API – Allows to perform programmatically from R * CRUD operations (Create, Read, Update, Delete) on GeoServer resources including ``workspace``, ``namespaces``, ``dataStores`` ``featureTypes``, ``layers``, ``styles``, ``settings`` (workspaces, OGC services) etc. * Data upload to Geoserver data directory (e.g. upload shapefile) *** If you wish to sponsor geosapi, do not hesitate to [contact me](mailto:eblondel.pro@gmail.com) Many thanks to the following organizations that have provided fundings for strenghtening the ``geosapi`` package: *** **Table of contents** [**1. Overview**](#package_overview)
[**2. Package status**](#package_status)
[**3. Credits**](#package_credits)
[**4. User guide**](#user_guide)
   [4.1 Installation](#install_guide)
   [4.2 Connect to GeoServer REST API](#GSManager)
   [**4.3 GeoServer ``workspaces``**](#GSWorkspace)
      [4.3.1 Get a (list of) ``workspace(s)``](#GSWorkspace-get)
      [4.3.2 Create a new ``workspace``](#GSWorkspace-create)
      [4.3.3 Update a new ``workspace``](#GSWorkspace-update)
      [4.3.4 Delete a new ``workspace``](#GSWorkspace-delete)
   [**4.4 GeoServer ``namespaces``**](#GSNamespace)
      [4.4.1 Get a (list of) ``namespace(s)``](#GSNamespace-get)
      [4.4.2 Create a new ``namespace``](#GSNamespace-create)
      [4.4.3 Update a new ``namespace``](#GSNamespace-update)
      [4.4.4 Delete a new ``namespace``](#GSNamespace-delete)
   [**4.5 Manage vector data in GeoServer**](#vectordata)
      [**4.5.1 GeoServer ``dataStores``**](#GSDataStore)
         [4.5.1.1 Get a (list of) ``dataStore(s)``](#GSDataStore-get)
         [4.5.1.2 Create a new ``dataStore``](#GSDataStore-create)
            [4.5.1.2.1 Create a **Shapefile** ``dataStore``](#GSShapefileDataStore-create)
            [4.5.1.2.2 Create a **Shapefiles Directory** ``dataStore``](#GSShapefileDirectoryDataStore-create)
            [4.5.1.2.3 Create a **GeoPackage** ``dataStore``](#GSGeoPackageDataStore-create)
         [4.5.1.3 Update a new ``dataStore``](#GSDataStore-update)
         [4.5.1.4 Delete a new ``dataStore``](#GSDataStore-delete)
      [**4.5.2 Upload features/vector data**](#GSFeatureType-upload)
      [**4.5.3 GeoServer ``featureTypes``**](#GSFeatureType)
         [4.5.3.1 Get a (list of) ``featureType(s)``](#GSFeatureType-get)
         [4.5.3.2 Create a new ``featureType``](#GSFeatureType-create)
         [4.5.3.3 Update a new ``featureType``](#GSFeatureType-update)
         [4.5.3.4 Delete a new ``featureType``](#GSFeatureType-delete)
      [**4.5.3 GeoServer ``layers``**](#GSLayer)
         [4.5.4.1 Get a (list of) ``layer(s)``](#GSLayer-get)
         [4.5.4.2 Create a new ``layer``](#GSLayer-create)
         [4.5.4.3 Update a new ``layer``](#GSLayer-update)
         [4.5.4.4 Delete a new ``layer``](#GSLayer-delete)
      [**4.5.5 Publication of GeoServer feature layer**](#publishFeatureLayer)
         [4.5.5.1 Publish Geoserver feature layer](#publishFeatureLayer-publish)
         [4.5.5.2 Unpublish Geoserver feature layer](#publishFeatureLayer-unpublish)
      [**4.5.6 GeoServer ``layer groups``**](#GSLayerGroup)
         [4.5.6.1 Get a (list of) ``layer group(s)``](#GSLayerGroup-get)
         [4.5.6.2 Create a new ``layer group``](#GSLayerGroup-create)
         [4.5.6.3 Update a new ``layer group``](#GSLayerGroup-update)
         [4.5.6.4 Delete a new ``layer group``](#GSLayerGroup-delete)
   [**4.6 Manage raster data in GeoServer**](#rasterdata)
      [**4.6.1 GeoServer ``coveragestores``**](#GSCoverageStore)
         [4.6.1.1 Get a (list of) ``coveragestore(s)``](#GSCoverageStore-get)
         [4.6.1.2 Create a new ``coveragestore``](#GSCoverageStore-create)
            [4.6.1.2.1 Create a **GeoTIFF** ``coveragestore``](#GSGeoTIFFCoverageStore-create)
            [4.6.1.2.2 Create a **WorldImage** ``coveragestore``](#GSWorldImageCoverageStore-create)
            [4.6.1.2.3 Create a **ArcGrid** ``coveragestore``](#GSArcGridCoverageStore-create)
            [4.6.1.2.4 Create a **ImageMosaic** ``coveragestore``](#GSImageMosaicCoverageStore-create)
         [4.6.1.3 Update a new ``coveragestore``](#GSCoverageStore-update)
         [4.6.1.4 Delete a new ``coveragetore``](#GSCoverageStore-delete)
      [**4.6.2 Upload coverage/raster data**](#GSCoverage-upload)
      [**4.6.3 GeoServer ``coverages``**](#GSCoverage)
         [4.6.3.1 Get a (list of) ``coverage(s)``](#GSCoverage-get)
         [4.6.3.2 Create a new ``coverage``](#GSCoverage-create)
         [4.6.3.3 Update a new ``coverage``](#GSCoverage-update)
         [4.6.3.4 Delete a new ``coverage``](#GSCoverage-delete)
   [**4.7 Manage styles in GeoServer**](#styles)
      [4.7.1 Get a (list of) ``style(s)``](#GSStyle-get)
      [4.7.2 Create a new ``style``](#GSStyle-create)
      [4.7.3 Update a new ``style``](#GSStyle-update)
      [4.7.4 Delete a new ``style``](#GSStyle-delete)
   [**4.8 Manage workspace settings in GeoServer**](#settings_workspaces)
      [4.8.1 Create a workspace settings](#GSWorkspaceSettings-create)
      [4.8.2 Get a workspace settings](#GSWorkspaceSettings-get)
      [4.8.3 Update a workspace settings](#GSWorkspaceSettings-update)
      [4.8.4 Delete a workspace settings](#GSWorkspaceSettings-delete)
   [**4.9 Manage OGC service (WMS/WFS/WCS) settings in GeoServer**](#settings_services)
      [4.9.1 Get an OGC service (WMS/WFS/WCS) settings](#GSServiceSettings-get)
      [4.9.2 Update an OGC service (WMS/WFS/WCS) settings](#GSServiceSettings-update)
      [4.9.3 Enable/Disable an OGC service (WMS/WFS/WCS)](#GSServiceSettings-enable)
[**5. Issue reporting**](#package_issues)
### 1. Overview and vision *** Until now, equivalent tools were existing for other programming languages (e.g. Java, Python) but not in R. [geosapi](https://github.com/eblondel/geosapi) intends to provide R native interface to the GeoServer REST API, in order to facilitate publication of geographic data resources from R to [GeoServer](https://geoserver.org/). ### 2. Development status *** Published on CRAN ### 3. Credits *** (c) 2016, Emmanuel Blondel Package distributed under MIT license. If you use ``geosapi``, i would be very grateful if you can add a citation in your published work. By citing ``geosapi``, beyond acknowledging the work, you contribute to make it more visible and guarantee its growing and sustainability. You can get the preferred citation by running ```citation("geosapi)``` in R. You can reference ``geosapi`` through its DOI: [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1184895.svg)](https://doi.org/10.5281/zenodo.1184895) ### 4. User guide *** #### 4.1 How to install geosapi in R For now, the package can be installed from Github ```R install.packages("remotes") ``` Once the devtools package loaded, you can use the install_github to install ``geosapi. By default, package will be installed from ``master`` which is the current version in development (likely to be unstable). ```R remotes::install_github("eblondel/geosapi") ``` #### 4.2 Connect to GeoServer REST API The main entry point of ``geosapi`` is the ``GSManager``. To configure it, enter the following line, specifying the base ``URL`` of your GeoServer, and your credentials: ```R gsman <- GSManager$new( url = "http://localhost:8080/geoserver", #baseUrl of the Geoserver user = "admin", pwd = "geoserver", #credentials logger = NULL #logger, for info or debugging purpose ) ``` By default, the ``geosapi`` **logger** is deactivated. To enable the logger, specify the level of log you wish as parameter of the above R code. Two logging levels are available: * ``INFO``: will print the ``geosapi`` logs. Three types of messages can be distinguished: ``INFO``, ``WARN``, ``ERROR``. The latter is generally associated with a ``stop`` and indicate an blocking error for the R method executed. * ``DEBUG`` will print the above ``geosapi`` logs, and report all logs from HTTP requests performed with ``cURL`` The ``GSManager`` inherits all methods of resource dependent managers, to provide the users with a single R interface to GeoServer REST API operations. In addition, the ``GSManager`` allows accessing the different resource managers through specific methods. The following ``managers`` are available: * ``GSNamespaceManager``: Manage ``namespaces`` * ``GSWorkspaceManager``: Manage ``workspaces`` * ``GSDataStoreManager``: Manage ``dataStores`` #### 4.3 Manipulate GeoServer ``workspaces`` >**GeoServer API doc**: https://docs.geoserver.org/stable/en/user/rest/api/workspaces.html ##### 4.3.1 Get a (list of) ``workspace(s)`` ```R #get workspace objects wslist <- gsman$getWorkspaces() #get workspace names only wsnames <- gsman$getWorkspaceNames() #get workspace by name ws <- gsman$getWorkspace("topp") ``` ##### 4.3.2 Create a new ``workspace`` ```R created <- gsman$createWorkspace("geosapi", "http://geoapi") ``` ##### 4.3.3 Update an existing ``workspace`` ```R updated <- gsman$updateWorkspace("geosapi", "http://newgeoapi") ``` ##### 4.3.4 Delete an existing ``workspace`` ```R deleted <- gsman$deleteWorkspace("geosapi", recurse = TRUE) ``` The ``recurse`` parameter allows to delete all layers published under the deleted workspace. #### 4.4 Manipulate GeoServer ``namespaces`` >**GeoServer API doc**: https://docs.geoserver.org/stable/en/user/rest/api/namespaces.html ##### 4.4.1 Get a (list of) ``namespace(s)`` ```R #get namespace objects nslist <- gsman$getNamespaces() #get namespace names only nsnames <- gsman$getNamespaceNames() #get namespace by name ns <- gsman$getNamespace("topp") ``` ##### 4.4.2 Create a new ``namespace`` ```R created <- gsman$createNamespace("geosapi", "http://geoapi") ``` ##### 4.4.3 Update an existing ``namespace`` ```R updated <- gsman$updateNamespace("geosapi", "http://newgeoapi") ``` ##### 4.4.4 Delete an existing ``namespace`` ```R deleted <- gsman$deleteNamespace("geosapi", recurse = TRUE) ``` The ``recurse`` parameter allows to delete all layers published under the deleted namespace. #### 4.5 Manage **vector data** with GeoServer ##### 4.5.1 Manipulate GeoServer ``dataStores`` >**GeoServer API doc**: https://docs.geoserver.org/stable/en/user/rest/api/datastores.html ###### 4.5.1.1 Get a (list of) ``dataStore(s)`` ```R #get datastore objects dslist <- gsman$getDataStores("topp") #get datastore names only dsnames <- gsman$getDataStoreNames("topp") #get datastore by name ns <- gsman$getDataStore("topp", "states_shapefile") ``` ###### 4.5.1.2 Create a new ``dataStore`` * 4.5.1.2.1 Create a **Shapefile** ``dataStore`` ```R ds = GSShapefileDataStore$new(dataStore="topp_datastore", description = "topp_datastore description", enabled = TRUE, url = "file:data/shapefiles/states.shp") created <- gsman$createDataStore("topp", ds) ``` * 4.5.1.2.2 Create a **Shapefiles Directory** ``dataStore`` ```R ds = GSShapefileDirectoryDataStore$new(dataStore="topp_datastore", description = "topp_datastore description", enabled = TRUE, url = "file:data/shapefiles") created <- gsman$createDataStore("topp", ds) ``` * 4.5.1.2.3 Create a **GeoPackage** ``dataStore`` ```R ds = GSGeoPackageDataStore$new(dataStore="topp_datastore", description = "topp_datastore description", enabled = TRUE, database = "file:data/somefile.gpkg") created <- gsman$createDataStore("topp", ds) ``` ###### 4.5.1.3 Update an existing ``dataStore`` ```R dataStore <- gsman$getDataStore("topp", "topp_datastore") dataStore$setDescription("topp_datastore updated description") dataStore$setEnabled(FALSE) updated <- gsman$updateDataStore("topp", dataStore) ``` ###### 4.5.1.4 Delete an existing ``dataStore`` ```R deleted <- gsman$deleteDataStore("topp", "topp_datastore", recurse = TRUE) ``` The ``recurse`` parameter allows to delete all layers published under the deleted datastore. ##### 4.5.2 Upload features/vector data The `geosapi` offers methods to upload vector data to configured `datastores`. A generic method `gsman$uploadData` allows to upload any kind of data type supported by GeoServer, by specifying the file extension. To upload data, several parameters have to be specified including: * `ws`: the workspace in which the datastore is configured * `ds`: the datastore in which data has to be uploaded * `endpoint`: choice among `file` (use a local file content as body), `url` (use a file URL), or `external` (path to a file). Important note: So far only `file` was tested and is supported. * `extension`: the data file extension * `configure`: either `none` (upload only, with no featuretype/layer configured by default), `first` (upload and configure featuretype/layer over the uploaded vector data) * `update`: update strategy, either `append` (upload that will fails in case data was already uploaded), or `overwrite` (overwrite the already uploaded data if existing) * `filename`: filename of the data resource to upload * `charset`: character set of the data resource * `contentType: data content type To simplify the upload, several data-specific methods were designed targeting specific data file extensions. These methods share the same parameters as above except the `extension` and `contentType` that will be pre-set according to the data upload format: * `uploadShapefile`: upload a shapefile * `uploadProperties`: upload a properties file * `uploadH2`: upload a H2 database * `uploadSpatialite`: upload a spatialite file * `uploadAppSchema`: upload an app schema * `uploadGeoPackage`: upload an OGC GeoPackage Example with an OGC Geopackage upload ```r uploaded <- gsman$uploadGeoPackage( ws = "my_workspace", ds = "my_gpkg_datastore", endpoint = "file", configure = "first", update = "overwrite", charset = "UTF-8", filename = "myfile.gpkg" ) ``` ##### 4.5.3 Manipulate GeoServer ``featureType`` >**GeoServer API doc**: https://docs.geoserver.org/stable/en/user/rest/api/featuretypes.html ###### 4.5.3.1 Get a (list of) ``featureType(s)`` ```R #get featureType objects ftlist <- gsman$getFeatureTypes("topp", "taz_shapes") #get featureType names only ftnames <- gsman$getFeatureTypeNames() #get featureType by name ft <- gsman$getFeatureType("topp", "taz_shapes", "tasmania_cities") ``` ###### 4.5.3.2 Create a new ``featureType`` ```R #create featuretype object featureType <- GSFeatureType$new() featureType$setName("tasmania_cities2") featureType$setNativeName("tasmania_cities") featureType$setAbstract("abstract") featureType$setTitle("title") featureType$setSrs("EPSG:4326") featureType$setNativeCRS("EPSG:4326") featureType$setEnabled(TRUE) featureType$setProjectionPolicy("REPROJECT_TO_DECLARED") featureType$setLatLonBoundingBox(-180,-90,180,90, crs = "EPSG:4326") featureType$setNativeBoundingBox(-180,-90,180,90, crs ="EPSG:4326") md1 <- GSMetadataLink$new(type = "text/xml", metadataType = "ISO19115:2003", content = "http://somelink.org/xml") featureType$addMetadataLink(md1) md2 <- GSMetadataLink$new(type = "text/html", metadataType = "ISO19115:2003", content = "http://somelink.org/html") featureType$addMetadataLink(md2) #create the feature type in GeoServer created <- gsman$createFeatureType("topp", "taz_shapes", featureType) ``` **How to set a Geoserver SQL View** With ``geosapi``, it is also possible to configure a Geoserver SQL View, possibly with dynamic parameters. For this, GeoServer uses the concept of _VirtualTable_. The code below explains how to configure such virtual table with ``geosapi``: ```R ##virtual table vt <- GSVirtualTable$new() vt$setName("view name") vt$setSql("select * from mydataset where flag = '%flag%' and year between %start_year% and %end_year%") ## incase of spatial virtual table, specify the geometry column name, type and SRID vtg <- GSVirtualTableGeometry$new(name = "the_geom", type = "MultiPolygon", srid = 4326) vt$setGeometry(vtg) ##in case of dynamic parameters handled in your sql (bound with %) vtp1 <- GSVirtualTableParameter$new(name = "flag", defaultValue = "FRA", regexpValidator = "^[\\w\\d\\s]+$") vtp2 <- GSVirtualTableParameter$new(name = "start_year", defaultValue = "2000",regexpValidator = "^[\\d]+$") vtp3 <- GSVirtualTableParameter$new(name = "end_year", defaultValue = "2010",regexpValidator = "^[\\d]+$") vt$addParameter(vtp1) vt$addParameter(vtp2) vt$addParameter(vtp3) ##add virtual table to featureType featureType$setVirtualTable(vt) ``` ###### 4.5.3.3 Update an existing ``featureType`` ```R #fetch featureType and update some properties featureType <- gsman$getFeatureType("topp", "taz_shapes", "tasmania_cities2") featureType$setAbstract("abstract updated") featureType$setEnabled(FALSE) #update featureType in GeoServer updated <- gsman$updateFeatureType("topp", "taz_shapes", featureType) ``` ###### 4.5.3.4 Delete an existing ``featureType`` ```R deleted <- gsman$deleteFeatureType("topp", "taz_shapes", "tasmania_cities2", recurse = TRUE) ``` The ``recurse`` parameter allows to delete the layer published for the deleted featureType. ##### 4.5.4 Manipulate GeoServer ``layers`` >**GeoServer API doc**: https://docs.geoserver.org/stable/en/user/rest/api/layers.html ###### 4.5.4.1 Get a (list of) ``layer(s)`` ```R #get layer objects layers <- gsman$getLayers() #get layer names only layerNames <- gsman$getLayerNames() #get layer by name layer <- gsman$getLayer("tasmania_cities") ``` ###### 4.5.4.2 Create a new ``layer`` This method shows how to _publish_ a created ``featureType`` (as created in [4.5.3 Create a new ``FeatureType``](https://github.com/eblondel/geosapi/wiki#GSFeatureType-create)) ```R layer <- GSLayer$new() layer$setName("tasmania_cities2") layer$setDefaultStyle("capitals") layer$addStyle("generic") created <- gsman$createLayer(layer) ``` ###### 4.5.4.3 Update an existing ``layer`` ```R lyr <- gsman$getLayer("tasmania_cities") lyr$setDefaultStyle("generic") updated <- gsman$updateLayer(lyr) ``` ###### 4.5.4.4 Delete an existing ``layer`` ```R deleted <- gsman$deleteLayer("tasmania_cities2") ``` ##### 4.5.5 Publication of GeoServer feature layer GeoServer manages feature data layers by means of two different types of resources: the ``featureType`` and the ``layer``. When created, the latter will _publish_ the former. Hence, in order to **publish** a complete feature data layer, two GeoServer resources should be created. The below methods allow the user to do both creation through a **single** method. To distinguish them from the above API methods and avoid confusion, we don't use the terminology **create** / **delete** but **publish** / **unpublish**. ###### 4.5.5.1 Publish Geoserver feature layer The method ``publishLayer`` will sequentially do two requests to GeoServer: * Create ``featureType`` * Create ``layer`` ```R #create featuretype featureType <- GSFeatureType$new() featureType$setName("tasmania_cities2") featureType$setNativeName("tasmania_cities") featureType$setAbstract("abstract") featureType$setTitle("title") featureType$setSrs("EPSG:4326") featureType$setNativeCRS("EPSG:4326") featureType$setEnabled(TRUE) featureType$setProjectionPolicy("REPROJECT_TO_DECLARED") featureType$setLatLonBoundingBox(-180,-90,180,90, crs = "EPSG:4326") featureType$setNativeBoundingBox(-180,-90,180,90, crs ="EPSG:4326") md1 <- GSMetadataLink$new(type = "text/xml", metadataType = "ISO19115:2003", content = "http://somelink.org/xml") featureType$addMetadataLink(md1) md2 <- GSMetadataLink$new(type = "text/html", metadataType = "ISO19115:2003", content = "http://somelink.org/html") featureType$addMetadataLink(md2) #create layer layer <- GSLayer$new() layer$setName("tasmania_cities2") layer$setDefaultStyle("capitals") layer$addStyle("generic") #try to publish the complete layer (featuretype + layer) published <- gsman$publishLayer("topp", "taz_shapes", featureType, layer) ``` ###### 4.5.5.2 Unpublish Geoserver feature layer The method ``publishLayer`` will sequentially do two requests to GeoServer: * Delete ``layer`` * Delete ``featureType`` ```R #try to unpublish the complete layer (featuretype + layer) published <- gsman$unpublishLayer("topp", "taz_shapes", "tasmania_cities2") ``` ##### 4.5.6 Manipulate GeoServer ``layer groups`` >**GeoServer API doc**: https://docs.geoserver.org/stable/en/user/rest/api/layergroups.html ###### 4.5.6.1 Get a (list of) ``layer group(s)`` ```R #get layer groups objects layerGroups <- gsman$getLayerGroups() #get layer group names only layerGroupNames <- gsman$getLayerGroupNames() #get layer group by name layerGroup <- gsman$getLayerGroup("test_layergroup") ``` ###### 4.5.6.2 Create a new ``layer group`` ```R lyr <- GSLayerGroup$new() lyr$setName("test_layergroup") lyr$setTitle("title") lyr$setAbstract("abstract") lyr$setMode("SINGLE") lyr$addLayer(layer = "tasmania_cities", style = "generic") lyr$setBounds(-180,-90,180,90,crs = "EPSG:4326") gsman$createLayerGroup(layerGroup = lyr) ``` ###### 4.5.6.3 Update an existing ``layer group`` ```R lyr <- GSLayerGroup$new() lyr$setName("test_layergroup") lyr$setTitle("title") lyr$setAbstract("abstract 2") lyr$setMode("SINGLE") lyr$addLayer(layer = "tasmania_cities", style = "generic") lyr$setBounds(-180,-90,180,90,crs = "EPSG:4326") gsman$updateLayerGroup(layerGroup = lyr) ``` ###### 4.5.6.4 Delete an existing ``layer group`` ```R deleted <- gsman$deleteLayerGroup("test_layergroup") ``` #### 4.6. Manage **raster data** with GeoServer ##### 4.6.1 Manipulate GeoServer ``coveragestores`` >**GeoServer API doc**: https://docs.geoserver.org/stable/en/user/rest/api/coveragestores.html ###### 4.6.1.1 Get a (list of) ``coveragestore(s)`` ```R #get coveragestore objects cslist <- gsman$getCoverageStores("nurc") #get coveragestore names only csnames <- gsman$getCoverageStoreNames("nurc") #get coveragestore by name cs <- gsman$getCoverageStore("nurc", "mosaic") ``` ###### 4.6.1.2 Create a new ``coveragetore`` * 4.6.1.2.1 Create a **GeoTIFF** ``coveragestore`` ```R cs = GSGeoTIFFCoverageStore$new(name="sfdem_new", description = "sfdem_new description", enabled = TRUE) created <- gsman$createCoverageStore("sf", cs) ``` * 4.6.1.2.2 Create a **WorldImage** ``coveragestore`` ```R cs = GSWorldImageCoverageStore$new(name="sfdem_new", description = "sfdem_new description", enabled = TRUE) created <- gsman$createCoverageStore("sf", cs) ``` * 4.6.1.2.3 Create a **ArcGrid** ``coveragestore`` ```R cs = GSArcGridCoverageStore$new(name="sfdem_new", description = "sfdem_new description", enabled = TRUE) created <- gsman$createCoverageStore("sf", cs) ``` * 4.6.1.2.4 Create a **ImageMosaic** ``coveragestore`` ```R cs = GSImageMosaicCoverageStore$new(name="sfdem_new", description = "sfdem_new description", enabled = TRUE) created <- gsman$createCoverageStore("sf", cs) ``` ###### 4.6.1.3 Update an existing ``coveragestore`` ```R cs <- gsman$getCoverageStore("sf", "sfdem") cs$setDescription("sfdem updated description") cs$setEnabled(FALSE) updated <- gsman$updateCoverageStore("sf", cs) ``` ###### 4.6.1.4 Delete an existing ``coveragestore`` ```R deleted <- gsman$deleteCoverageStore("sf", "sfdem", recurse = TRUE) ``` The ``recurse`` parameter allows to delete all coverages published under the deleted coveragestore. ##### 4.6.2 Upload coverage/raster data The `geosapi` offers methods to upload coverage data to configured `coveragestores`. A generic method `gsman$uploadCoverage` allows to upload any kind of coverage data type supported by GeoServer, by specifying the file extension. To upload data, several parameters have to be specified including: * `ws`: the workspace in which the datastore is configured * `ds`: the datastore in which data has to be uploaded * `endpoint`: choice among `file` (use a local file content as body), `url` (use a file URL), or `external` (path to a file). Important note: So far only `file` was tested and is supported. * `extension`: the data file extension * `configure`: either `none` (upload only, with no coverage/layer configured by default), `first` (upload and configure coverae/layer over the uploaded data) * `update`: update strategy, either `append` (upload that will fails in case data was already uploaded), or `overwrite` (overwrite the already uploaded data if existing) * `filename`: filename of the data resource to upload * `charset`: character set of the data resource * `contentType: data content type To simplify the upload, several coverage-specific methods were designed targeting specific data file extensions. These methods share the same parameters as above except the `extension` and `contentType` that will be pre-set according to the data upload format: * `uploadGeoTIFF`: upload a GeoTIFF file * `uploadWorldImage`: upload a WorldImage file * `uploadArcGrid`: upload an ArcGrid file * `uploadImageMosaic`: upload an ImageMosaic Example with a GeoTIFF upload ```r uploaded <- gsman$uploadGeoTIFF( ws = "sf", cs = "sfdem_new", endpoint = "file", configure = "none", update = "overwrite", filename = system.file("extdata/sfdem_new.tif", package = "geosapi") ) ``` ##### 4.6.3 Manipulate GeoServer ``coverages`` >**GeoServer API doc**: https://docs.geoserver.org/stable/en/user/rest/api/coverages.html ###### 4.6.3.1 Get a (list of) ``coverage(s)`` ```R #get coverage objects covlist <- gsman$getCoverages("sf", "sfdem") #get coverage names only covnames <- gsman$getCoverageNames("sf", "sfdem") #get coverage by name cov <- gsman$getCoverage("sf", "sfdem", "sfdem") ``` ###### 4.6.3.2 Create a new ``coverage`` ```R #create coverage object cov <- GSCoverage$new() cov$setName("sfdem_new") cov$setNativeName("sfdem_new") cov$setTitle("Title for sfdem") cov$setDescription("Description for sfdem") cov$addKeyword("sfdem keyword1") cov$addKeyword("sfdem keyword2") cov$addKeyword("sfdem keyword3") md1 <- GSMetadataLink$new( type = "text/xml", metadataType = "ISO19115:2003", content = "http://somelink.org/sfdem_new/xml" ) cov$addMetadataLink(md1) md2 <- GSMetadataLink$new( type = "text/html", metadataType = "ISO19115:2003", content = "http://somelink.org/sfdem_new/html" ) cov$addMetadataLink(md2) cov$setSrs("EPSG:4326") cov$setNativeCRS("EPSG:26713") cov$setLatLonBoundingBox(-103.87108701853181, 44.370187074132616, -103.62940739432703, 44.5016011535299, crs = "EPSG:4326") cov$setNativeBoundingBox(589980, 4913700, 609000, 4928010, crs = "EPSG:26713") created <- gsman$createCoverage(ws = "sf", cs = "sfdem_new", coverage = cov) ``` **How to set a Geoserver Coverage View** With ``geosapi``, it is also possible to configure a Geoserver Coverage View. For this, GeoServer uses the concept of _CoverageView_. The code below explains how to configure such coverage view with ``geosapi``: ```R ##coverage view coview <- GSCoverageView$new() coview$setName("sfdem_new") coview$setEnvelopeCompositionType("INTERSECTION") coview$setSelectedResolution("BEST") coview$setSelectedResolutionIndex(-1) coviewband <- GSCoverageBand$new() coviewband$setDefinition("sfdem_new@0") coviewband$setIndex(0) coviewband$addInputBand(GSInputCoverageBand$new( coverageName = "sfdem_new", band = 0)) coview$addBand(coviewband) ##add coverage view to coverage cov$setView(coview) ``` ###### 4.6.3.3 Update an existing ``coverage`` ```R #fetch coverage and update some properties cov <- gsman$getCoverage("sf", "sfdem", "sfdem") cov$setAbstract("abstract updated") cov$setEnabled(FALSE) #update coverage in GeoServer updated <- gsman$updateCoverage("sf", "sfdem", cov) ``` ###### 4.6.3.4 Delete an existing ``coverage`` ```R deleted <- gsman$deleteCoverage("sf", "sfdem", "sfdem", recurse = TRUE) ``` The ``recurse`` parameter allows to delete the layer published for the deleted featureType. #### 4.7. Manage **styles** with GeoServer ##### 4.7.1 Get a (list of) ``style``(s) ```R styles <- gsman$getStyles() stylenames <- gsman$getStyleNames() style <- gsman$getStyle("capitals") ``` From GeoServer 2.2, it is also possible to get the content of a style, ie the SLD body: ```R sld <- gsman$getSLDBody("capitals") ``` ##### 4.7.2 Create a new ``style`` ```R sldFile <- system.file("extdata", "mystyle.sld", package = "geosapi") #to use 'file' argument of gsman$createStyle sldStyle <- xmlParse(sldFile) #to use 'sldBody' argument of gsman$createStyle created <- gsman$createStyle(file = sldFile, name = "mystyle") ``` ##### 4.7.3 Update a new ``style`` ```R sldFile2 <- system.file("extdata", "mystyle2.sld", package = "geosapi") #to use 'file' argument of gsman$updateStyle sldStyle2 <- xmlParse(sldFile2) #to use 'sldBody' argument of gsman$updateStyle updated <- gsman$updateStyle(sldBody = sldStyle2, name = "mystyle") ``` ##### 4.7.4 Delete an existing ``style`` ```R deleted <- gsman$deleteStyle("mystyle", recurse = TRUE, purge = TRUE) ``` All methods describe here above also support a ``ws`` argument where a workspace can be specified. #### 4.8. Manage **workspace settings** with GeoServer Geoserver allows to activate settings by workspace. In such case, this will overwrite the global Geoserver settings. Activating these settings is required to set-up specific OGC service capabilities par workspace (see next section). ##### 4.8.1 Create a workspace settings Creating a workspace settings is equivalent to check the "Enabled" checkbox in the _Settings_ section of a workspace edition page in the GeoServer UI. To create it (assuming a workspace named ``geosapi``), run the following code: ```R settings <- GSWorkspaceSettings$new() settings$setNumDecimals(5) #custom number of decimals for data published in this workspace created <- gsman$createWorkspaceSettings("geosapi", settings) ``` ##### 4.8.2 Get a workspace settings To get a workspace settings, use the following code: ```R geosapi_settings <- gsman$getWorkspaceSettings("geosapi") ``` This method can be used in view of updating a workspace settings. ##### 4.8.3 Update a workspace settings Similar method can be used for updating the workspace configuration: ```R settings <- gsman$getWorkspaceSettings("geosapi") settings$setNumDecimals(9) #change number of decimals created <- gsman$updateWorkspaceSettings("geosapi", settings) ``` ##### 4.8.4 Delete a workspace settings The settings can be deleted (equivalent of unchecking the "Enabled" checkbox in a workspace settings section): ```R deleted <- gsman$deleteWorkspaceSettings("geosapi") ``` #### 4.9 Manage OGC Service (WMS/WFS/WCS) settings with GeoServer ##### 4.9.1 Get an OGC service (WMS/WFS/WCS) settings To get an OGC service settings (global, or workspace specific), geosapi offers a generic method that can be used as follows: ```R #get WMS global settings wms_global_settings <- gsman$getServiceSettings(service = "WMS") #get WMS geosapi settings wms_geosapi_settings <- gsman$getServiceSettings(service = "WMS", ws = "geosapi") ``` Shortcut methods can also be used as follow: ```R #get WMS global settings wms_global_settings <- gsman$getWmsSettings() #get WMS geosapi settings wms_geosapi_settings <- gsman$getWmsSettings(ws = "geosapi") ``` Analog methods are available for WFS and WCS. ##### 4.9.2 Update an OGC service (WMS/WFS/WCS) settings OGC service settings can be updated, for example to activate/deactivate the service and fill minimum metadata (name, title, abstract). The following examples shows how to do update WMS global configuration and by workspace: * Update the WMS global configuration: ```R wmsSettings <- gsman$getWmsSettings() wmsSettings$setTitle("Tile for my global WMS") updated <- gsman$updateServiceSettings(wmsSettings, service = "WMS") ``` Shortcut update methods are also available. The last code line above can be replaced by: ```R updated <- gsman$updateWmsSettings(wmsSettings) ``` * Update WMS workspace configuration ```R wmsSettings <- GSServiceSettings$new(service = "WMS") wmsSettings$setTitle("Tile for my workspace WMS") wmsSettings$setAbstract("This WMS is set-up specifically for the workspace geosapi") updated <- gsman$updateServiceSettings(wmsSettings, service = "WMS", ws = "geosapi") ``` The last code line above could be replaced by the shortcut method: `` updated <- gsman$updateWmsSettings(wmsSettings, ws = "geosapi") `` ##### 4.9.3 Enable/Disable an OGC service (WMS/WFS/WCS) To make OGC service enabling/disabling easier for users, additional shortcut methods were set-up in geosapi. The following code examples show you how to enable/disable WMS/WFS/WCS * Enable/Disable Global OGC services ``` #disable global WMS gsman$disableWMS() #enable global WFS and WCS gsman$enableWFS() gsman$enableWCS() ``` * Enable/Disable OGC services at workspace level ```R #activates WMS for workspace 'geosapi' enabled <- gsman$enableWMS("geosapi") #deactivates WMS for workspace 'geosapi' disabled <- gsman$disableWMS("geosapi") ``` Analog functions are available for WFS and WCS: ``` #enable WFS and WCS for geosapi workspace gsman$enableWFS("geosapi") gsman$enableWCS("geosapi") ``` ``` #disable WFS and WCS for geosapi workspace gsman$disableWFS("geosapi") gsman$disableWCS("geosapi") ``` ### 5. Issue reporting *** Issues can be reported at https://github.com/eblondel/geosapi/issues