Skip to content
Emmanuel Blondel edited this page Jul 17, 2018 · 22 revisions

ows4R - R Interface to OGC Web-services

ows4R intends to provide an interface in R for using OGC web-services. The services being covered with ows4R are:

  • WFS (Web Feature Service) - versions 1.0.0,1.1.1, 2.0.0
  • CSW (Catalogue Service for the Web) - version 2.0.2

If you wish to sponsor geometa, do not hesitate to contact me


Table of contents

1. Overview
2. Package status
3. Credits
4. User guide
   4.1 Installation
   4.2 Web Feature Service (WFS)
      4.2.1 Create WFS Client
      4.2.2 Get Capabilities (GetCapabilities)
      4.2.3 Find a FeatureType by name
      4.2.4 Get FeatureType description (DescribeFeatureType)
      4.2.5 Get Features (GetFeature)
      4.2.6 Transactions (Insert, Update, Delete) (Transaction)
   4.3 Catalogue Service (CSW)
      4.3.1 Create CSW Client
      4.3.2 Get Capabilities (GetCapabilities)
      4.3.3 Describe a Record (DescribeRecord)
      4.3.4 Get a Record (GetRecordById)
      4.3.5 Get Records (GetRecords)
      4.3.6 Transactions (Insert, Update, Delete) (Transaction)
5. Issue reporting

1. Overview and vision


Until now, equivalent tools were existing for other programming languages (e.g. Java, Python) but not in R. ows4R intends to provide facilities to exploit OGC web-services in R.

2. Development status


TBD

3. Credits


(c) 2018, Emmanuel Blondel

Package distributed under MIT license.

If you use ows4R, i would be very grateful if you can add a citation in your published work. By citing ows4R, 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("ows4R") in R.

4. User guide


4.1 How to install ows4R in R

For now, the package can be installed from Github

install.packages("devtools")

Once the devtools package loaded, you can use the install_github to install ows4R. By default, package will be installed from master which is the current version in development (likely to be unstable).

require("devtools")
install_github("eblondel/ows4R")

4.2 R interface to Web Feature Service (WFS)

4.2.1 Create WFS Client

In order to operate on a Web Feature Service, you need to create an interface in R to this WFS. This is done with the class WFSClient, as follows:

wfs <- WFSClient$new("http://localhost:8080/geoserver/wfs", "2.0.0", logger = "INFO")

You can define the level of logger: "INFO" to get ows4R logs, "DEBUG" for all internal logs (such as as Curl details). It is also possible to define a username and credentials in case operations would require an authentication to use the Web Feature Service.

4.2.2 Get Capabilities (GetCapabilities)

When create the WFSClient, ows4R will run a GetCapabilities request. To access the WFS Capabilities and its sections, you can use the following code:

caps <- wfs$getCapabilities()

4.2.3. Find a FeatureType by name

ows4R gives the possibliity to find a FeatureType ("layer") by specifying its name. The exact parameter indicates if the name must match exactly the user-specified featuretype name.

ft <- caps$findFeatureTypeByName("topp:tasmania_water_bodies", exact = TRUE)

4.2.4 Get FeatureType description (DescribeFeatureType)

Once you get a featuretype, you may get its description (which corresponds to the result of a WFS DescribeFeatureType request)

ft$getDescription()

4.2.5 Get Features(GetFeature)

And finally you may want to get the actual features (geospatial data) for the given feature type (which corresponds to the the result of a WFS GetFeature request). By default, ows4R follows the OGC Simple Feature Specification. The output of the getFeatures() function will be an object of class sf (see package sf for more details).

sf <- ft$getFeatures()

If you are more familiar with spatial objects managed with the sp package. You may want to coerce the object into "Spatial" object:

sp <- as(sf, "Spatial")

4.2.6 Transactions (Insert,Update,Delete) (Transaction)

NOT YET SUPPORTED!

4.3 R Interface to Catalogue Service (CSW)

4.3.1 Create CSW Client

In order to operate on a Catalogue Service, you need to create an interface in R to this WFS. This is done with the class CSWClient, as follows:

csw <- CSWClient$new("http://localhost:8080/csw", "2.0.2", logger = "INFO")

You can define the level of logger: "INFO" to get ows4R logs, "DEBUG" for all internal logs (such as as Curl details). It is also possible to define a username and credentials in case operations would require an authentication to use the Catalogue Service.

For operations that require authentication (e.g. CSW Transaction operations on GeoNetwork), you may need to specify the user and pwd parameters.

4.3.2 Get Capabilities (GetCapabilities)

When create the CSWClient, ows4R will run a GetCapabilities request. To access the CSW Capabilities and its sections, you can use the following code:

caps <- csw$getCapabilities()

4.3.3 Describe a record (DescribeRecord)

NOT YET SUPPORTED

4.3.4 Get a record (GetRecordById)

The below example shows how to get a metadata record by ID, and bind it with geometa classes.

#supposing a metadata identified as "my-metadata-identifier"
md <- csw$getRecordById("my-metadata-identifier", outputSchema = "http://www.isotc211.org/2005/gmd")

4.3.5 Get records (GetRecords)

TBD

4.3.6 Transaction - Insert,Update,Delete (Transaction)

If the CSW server used supports Transaction operations (Insert, Update, Delete), ows4R allows you to perform these operations. The following examples highlight the different operations available:

Insert

mdfile <- system.file("extdata/data", "metadata.xml", package = "ows4R")
md <- geometa::ISOMetadata$new(xml = XML::xmlParse(mdfile))
insert <- csw$insertRecord(record = md)
insert$getResult() #TRUE if inserted, FALSE otherwise

Update (Full)

md$identificationInfo[[1]]$citation$setTitle("a new title")
update <- csw$updateRecord(record = md)
update$getResult() #TRUE if updated, FALSE otherwise

Update (Partial)

recordProperty <- CSWRecordProperty$new("apiso:Title", "NEW_TITLE")
filter = OGCFilter$new(PropertyIsEqualTo$new("apiso:Identifier", md$fileIdentifier))
constraint <- CSWConstraint$new(filter)
update <- csw$updateRecord(recordProperty = recordProperty, constraint = constraint)
update$getResult() #TRUE if updated, FALSE otherwise

Delete

delete <- csw$deleteRecordById(md$fileIdentifier)
delete$getResult() #TRUE if deleted, FALSE otherwise

5. Issue reporting


Issues can be reported at https://github.com/eblondel/ows4R/issues

Clone this wiki locally