-
Notifications
You must be signed in to change notification settings - Fork 8
Home
ows4R
intends to provide an interface in R for using OGC web-services. The services being covered with ows4R
are:
-
WFS
(Web Feature Service) - versions1.0.0
,1.1.1
,2.0.0
-
CSW
(Catalogue Service for the Web) - version2.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
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.
TBD
(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.
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")
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.
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()
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)
Once you get a featuretype, you may get its description (which corresponds to the result of a WFS DescribeFeatureType
request)
ft$getDescription()
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")
NOT YET SUPPORTED!
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.
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()
NOT YET SUPPORTED
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")
TBD
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
Issues can be reported at https://github.com/eblondel/ows4R/issues