Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Water
dataRetrieval
Commits
dfb97379
Commit
dfb97379
authored
Aug 19, 2016
by
David Watkins
Browse files
new branch
parent
9b1669bc
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
NAMESPACE
View file @
dfb97379
...
...
@@ -14,6 +14,7 @@ export(importWaterML1)
export(importWaterML2)
export(pCodeToName)
export(parameterCdFile)
export(readNGWMNdata)
export(readNWISdata)
export(readNWISdv)
export(readNWISgwl)
...
...
@@ -47,6 +48,7 @@ importFrom(curl,curl_version)
importFrom(dplyr,bind_rows)
importFrom(dplyr,full_join)
importFrom(dplyr,left_join)
importFrom(dplyr,mutate)
importFrom(dplyr,mutate_)
importFrom(dplyr,mutate_each_)
importFrom(dplyr,rbind_all)
...
...
R/importNGWMN_wml2.R
View file @
dfb97379
#' Function to return data from the
WaterML2 d
at
a
#' Function to return data from the
National Ground Water Monitoring Network waterML2 form
at
#'
#' This function accepts a url parameter for a WaterML2 getObservation. This function is still under development,
#' but the general functionality is correct.
#'
#'
#' @param input character or raw, containing the url for the retrieval or a path to the data file, or raw XML.
#' @param asDateTime logical, if \code{TRUE} returns date and time as POSIXct, if \code{FALSE}, character
#' @param tz character to set timezone attribute of datetime. Default is an empty quote, which converts the
#' datetimes to UTC (properly accounting for daylight savings times based on the data's provided tz_cd column).
#' Possible values to provide are "America/New_York","America/Chicago", "America/Denver","America/Los_Angeles",
#' "America/Anchorage","America/Honolulu","America/Jamaica","America/Managua","America/Phoenix", and "America/Metlakatla"
#' @return mergedDF a data frame time, value,
description, qualifier, and identifier
#' @return mergedDF a data frame
source,
time, value,
uom, uomTitle, comment, gmlID
#' @export
#' @importFrom xml2 read_xml
#' @importFrom xml2 xml_find_all
...
...
@@ -17,9 +17,12 @@
#' @importFrom xml2 xml_attr
#' @importFrom lubridate parse_date_time
#' @examples
#'
#' \dontrun{
#' url <- "http://cida.usgs.gov/ngwmn_cache/sos?request=GetObservation&service=SOS&version=2.0.0&observedProperty=urn:ogc:def:property:OGC:GroundWaterLevel&responseFormat=text/xml&featureOfInterest=VW_GWDP_GEOSERVER.USGS.403836085374401"
#' data <- importNGWMN_wml2(url)
#' }
importNGMWN_wml2
<-
function
(
input
,
asDateTime
=
FALSE
,
tz
=
""
){
#TODO: update documentation
if
(
tz
!=
""
){
tz
<-
match.arg
(
tz
,
c
(
"America/New_York"
,
"America/Chicago"
,
"America/Denver"
,
"America/Los_Angeles"
,
...
...
@@ -38,58 +41,59 @@ importNGMWN_wml2 <- function(input, asDateTime=FALSE, tz=""){
returnedDoc
<-
xml_root
(
getWebServiceData
(
input
,
encoding
=
'gzip'
))
}
timeSeries
<-
xml_find_all
(
returnedDoc
,
"//wml2:MeasurementTimeseries"
)
#each parameter/site combo
if
(
0
==
length
(
timeSeries
)){
df
<-
data.frame
()
if
(
!
raw
){
attr
(
df
,
"url"
)
<-
input
}
return
(
df
)
}
mergedDF
<-
NULL
for
(
t
in
timeSeries
){
gmlID
<-
xml_attr
(
t
,
"id"
)
uomTitle
<-
xml_attr
(
xml_find_all
(
t
,
".//wml2:uom"
),
"title"
)
TVP
<-
xml_find_all
(
t
,
".//wml2:MeasurementTVP"
)
#time-value pairs
time
<-
xml_text
(
xml_find_all
(
TVP
,
".//wml2:time"
))
if
(
asDateTime
){
time
<-
parse_date_time
(
time
,
c
(
"%Y"
,
"%Y-%m-%d"
,
"%Y-%m-%dT%H:%M"
,
"%Y-%m-%dT%H:%M:%S"
,
"%Y-%m-%dT%H:%M:%OS"
,
"%Y-%m-%dT%H:%M:%OS%z"
),
exact
=
TRUE
)
#^^setting tz in as.POSIXct just sets the attribute, does not convert the time!
attr
(
time
,
'tzone'
)
<-
tz
response
<-
xml_name
(
returnedDoc
)
if
(
response
==
"GetObservationResponse"
){
timeSeries
<-
xml_find_all
(
returnedDoc
,
"//wml2:MeasurementTimeseries"
)
#each parameter/site combo
if
(
0
==
length
(
timeSeries
)){
df
<-
data.frame
()
if
(
!
raw
){
attr
(
df
,
"url"
)
<-
input
}
return
(
df
)
}
valueNodes
<-
xml_find_all
(
TVP
,
".//wml2:value"
)
values
<-
as.numeric
(
xml_text
(
valueNodes
))
nVals
<-
length
(
values
)
gmlID
<-
rep
(
gmlID
,
nVals
)
uomTitle
<-
rep
(
uomTitle
,
nVals
)
uom
<-
removeBlanks
(
xml_attr
(
valueNodes
,
"uom"
,
default
=
NA
))
source
<-
xml_attr
(
xml_find_all
(
TVP
,
".//wml2:source"
),
"title"
)
comment
<-
removeBlanks
(
xml_text
(
xml_find_all
(
TVP
,
".//wml2:comment"
)))
mergedDF
<-
NULL
df
<-
cbind.data.frame
(
source
,
time
,
value
=
values
,
uom
,
uomTitle
,
comment
,
gmlID
,
stringsAsFactors
=
FALSE
)
if
(
is.null
(
mergedDF
)){
mergedDF
<-
df
}
else
{
similarNames
<-
intersect
(
colnames
(
mergedDF
),
colnames
(
df
))
mergedDF
<-
full_join
(
mergedDF
,
df
,
by
=
similarNames
)
for
(
t
in
timeSeries
){
gmlID
<-
xml_attr
(
t
,
"id"
)
TVP
<-
xml_find_all
(
t
,
".//wml2:MeasurementTVP"
)
#time-value pairs
time
<-
xml_text
(
xml_find_all
(
TVP
,
".//wml2:time"
))
if
(
asDateTime
){
time
<-
parse_date_time
(
time
,
c
(
"%Y"
,
"%Y-%m-%d"
,
"%Y-%m-%dT%H:%M"
,
"%Y-%m-%dT%H:%M:%S"
,
"%Y-%m-%dT%H:%M:%OS"
,
"%Y-%m-%dT%H:%M:%OS%z"
),
exact
=
TRUE
)
#^^setting tz in as.POSIXct just sets the attribute, does not convert the time!
attr
(
time
,
'tzone'
)
<-
tz
}
valueNodes
<-
xml_find_all
(
TVP
,
".//wml2:value"
)
values
<-
as.numeric
(
xml_text
(
valueNodes
))
nVals
<-
length
(
values
)
gmlID
<-
rep
(
gmlID
,
nVals
)
uom
<-
removeBlanks
(
xml_attr
(
valueNodes
,
"uom"
,
default
=
NA
))
source
<-
xml_attr
(
xml_find_all
(
TVP
,
".//wml2:source"
),
"title"
)
comment
<-
removeBlanks
(
xml_text
(
xml_find_all
(
TVP
,
".//wml2:comment"
)))
df
<-
cbind.data.frame
(
source
,
time
,
value
=
values
,
uom
,
comment
,
gmlID
,
stringsAsFactors
=
FALSE
)
if
(
is.null
(
mergedDF
)){
mergedDF
<-
df
}
else
{
similarNames
<-
intersect
(
colnames
(
mergedDF
),
colnames
(
df
))
mergedDF
<-
full_join
(
mergedDF
,
df
,
by
=
similarNames
)
}
}
if
(
!
raw
){
url
<-
input
attr
(
mergedDF
,
"url"
)
<-
url
}
attr
(
mergedDF
,
"gml:identifier"
)
<-
xml_text
(
xml_find_all
(
returnedDoc
,
".//gml:identifier"
))
attr
(
mergedDF
,
"generationDate"
)
<-
xml_text
(
xml_find_all
(
returnedDoc
,
".//wml2:generationDate"
))
}
else
if
(
response
==
"ExceptionReport"
){
#TODO: what happens if exception?
}
if
(
!
raw
){
url
<-
input
attr
(
mergedDF
,
"url"
)
<-
url
}
attr
(
mergedDF
,
"gml:identifier"
)
<-
xml_text
(
xml_find_all
(
returnedDoc
,
".//gml:identifier"
))
attr
(
mergedDF
,
"generationDate"
)
<-
xml_text
(
xml_find_all
(
returnedDoc
,
".//wml2:generationDate"
))
return
(
mergedDF
)
}
...
...
R/readNGWMNdata.R
View file @
dfb97379
#' import data from the National Groundwater Monitoring Network \link{http://cida.usgs.gov/ngwmn/}
#' Only water level data and site metadata is currently available through the web service.
#' @param asDateTime
#' @param sites
#' @param request
#' @param asDateTime logical
#' @param featureID character
#' @param request character
#' @import utils
#' @importFrom dplyr mutate
#' @export
#'
readNGWMNdata
<-
function
(
sites
,
request
=
"observation"
,
asDateTime
=
TRUE
){
#TODO: documentation once more solidified
readNGWMNdata
<-
function
(
featureID
,
request
=
"observation"
,
asDateTime
=
TRUE
){
match.arg
(
request
,
c
(
"observation"
,
"featureOfInterest"
))
if
(
request
==
"observation"
){
#allow for multiple site calls, and aggregate here?
#will need to contruct this more piece by piece if other versions, properties are added
baseURL
<-
"http://cida.usgs.gov/ngwmn_cache/sos?request=GetObservation&service=SOS&version=2.0.0&observedProperty=urn:ogc:def:property:OGC:GroundWaterLevel&responseFormat=text/xml&featureOfInterest=VW_GWDP_GEOSERVER."
url
<-
paste0
(
baseURL
,
featureID
)
returnData
<-
importNGMWN_wml2
(
url
,
asDateTime
)
#tack on site number
siteNum
<-
rep
(
sub
(
'.*\\.'
,
''
,
featureID
),
nrow
(
returnData
))
returnData
<-
mutate
(
returnData
,
site
=
siteNum
)
returnData
<-
returnData
[,
c
(
7
,
1
:
6
)]
#move siteNum to the left
}
return
(
returnData
)
}
\ No newline at end of file
inst/extdata/WaterML1Example.xml
View file @
dfb97379
This diff is collapsed.
Click to expand it.
man/importNGMWN_wml2.Rd
View file @
dfb97379
...
...
@@ -2,7 +2,7 @@
% Please edit documentation in R/importNGWMN_wml2.R
\name{importNGMWN_wml2}
\alias{importNGMWN_wml2}
\title{Function to return data from the
WaterML2 d
at
a
}
\title{Function to return data from the
National Ground Water Monitoring Network waterML2 form
at}
\usage{
importNGMWN_wml2(input, asDateTime = FALSE, tz = "")
}
...
...
@@ -17,13 +17,16 @@ Possible values to provide are "America/New_York","America/Chicago", "America/De
"America/Anchorage","America/Honolulu","America/Jamaica","America/Managua","America/Phoenix", and "America/Metlakatla"}
}
\value{
mergedDF a data frame time, value,
description, qualifier, and identifier
mergedDF a data frame
source,
time, value,
uom, uomTitle, comment, gmlID
}
\description{
This function accepts a url parameter for a WaterML2 getObservation. This function is still under development,
but the general functionality is correct.
}
\examples{
\dontrun{
url <- "http://cida.usgs.gov/ngwmn_cache/sos?request=GetObservation&service=SOS&version=2.0.0&observedProperty=urn:ogc:def:property:OGC:GroundWaterLevel&responseFormat=text/xml&featureOfInterest=VW_GWDP_GEOSERVER.USGS.403836085374401"
data <- importNGWMN_wml2(url)
}
}
man/readNGWMNdata.Rd
View file @
dfb97379
...
...
@@ -2,14 +2,20 @@
% Please edit documentation in R/readNGWMNdata.R
\name{readNGWMNdata}
\alias{readNGWMNdata}
\title{import data from the National Groundwater Monitoring Network \link{http://cida.usgs.gov/ngwmn/}}
\title{import data from the National Groundwater Monitoring Network \link{http://cida.usgs.gov/ngwmn/}
Only water level data and site metadata is currently available through the web service.}
\usage{
readNGWMNdata(
sites
, request = "observation", asDateTime = TRUE)
readNGWMNdata(
featureID
, request = "observation", asDateTime = TRUE)
}
\arguments{
\item{request}{}
\item{featureID}{character}
\item{request}{character}
\item{asDateTime}{logical}
}
\description{
import data from the National Groundwater Monitoring Network \link{http://cida.usgs.gov/ngwmn/}
Only water level data and site metadata is currently available through the web service.
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment