From 80ae82d0685016f571fd52ac1fadaa1d0cbb942d Mon Sep 17 00:00:00 2001 From: jacpete Date: Wed, 30 Jun 2021 11:53:37 -0500 Subject: [PATCH] update readme and vignette --- README.Rmd | 6 ++-- README.md | 13 ++++----- vignettes/get_started.Rmd | 58 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 11 deletions(-) diff --git a/README.Rmd b/README.Rmd index aaaec6b..9c8ed75 100644 --- a/README.Rmd +++ b/README.Rmd @@ -100,10 +100,9 @@ esri2sf(url, where = where, outFields = outFields, crs = NULL) ``` -Also since the addition of the `WKT1_ESRI` output from sf::st_crs() in sf version 1.0-1, you can enter common CRS format (any that sf::st_crs() can handle) into the `crs` parameters and it will be able to convert to the ESRI formatted WKT needed for the outSR field in the REST query. +Also since the addition of the `WKT1_ESRI` output from sf::st_crs() in sf version 1.0-1, you can enter common CRS format (any that sf::st_crs() can handle) into the `crs` parameters and it will be able to convert to the ESRI formatted WKT needed for the outSR field in the REST query. Below are examples of the variety of input types that you can use with the `crs` parameters. All examples are just different formulations of the ESRI:102690 CRS. ```{r} -#Variety of inputs types that sf::st_crs() will accept as examples (all related to ESRI:102690 ) #ESRI Authority Code df1 <- esri2sf(url, where = where, outFields = outFields, crs = "ESRI:102690") #PROJ string @@ -112,9 +111,8 @@ df2 <- esri2sf(url, where = where, outFields = outFields, crs = "+proj=lcc +lat_ df3 <- esri2sf(url, where = where, outFields = outFields, crs = 'PROJCS["NAD_1983_StatePlane_Michigan_South_FIPS_2113_Feet",GEOGCS["GCS_North_American_1983",DATUM["North_American_Datum_1983",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["False_Easting",13123333.33333333],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-84.36666666666666],PARAMETER["Standard_Parallel_1",42.1],PARAMETER["Standard_Parallel_2",43.66666666666666],PARAMETER["Latitude_Of_Origin",41.5],UNIT["Foot_US",0.30480060960121924],AUTHORITY["EPSG","102690"]]') ``` -While the given output CRS was different for each they all are just different standard CRS formulations of ESRI:102690. This can be proven by the following function that calculated the mean difference in X-Y coordinates at each point. All are very close to 0. +Their similarity on the output CRS can be proven by the following function that calculates the mean difference in X-Y coordinates at each point. All are very close to 0. ```{r} -#Difference in coordinates are all basically 0 coord_diff <- function(df1, df2) { suppressWarnings({ c( diff --git a/README.md b/README.md index d6d31c6..042b2f8 100644 --- a/README.md +++ b/README.md @@ -208,9 +208,10 @@ Also since the addition of the `WKT1_ESRI` output from sf::st\_crs() in sf version 1.0-1, you can enter common CRS format (any that sf::st\_crs() can handle) into the `crs` parameters and it will be able to convert to the ESRI formatted WKT needed for the outSR field in the -REST query. +REST query. Below are examples of the variety of input types that you +can use with the `crs` parameters. All examples are just different +formulations of the ESRI:102690 CRS. - #Variety of inputs types that sf::st_crs() will accept as examples (all related to ESRI:102690 ) #ESRI Authority Code df1 <- esri2sf(url, where = where, outFields = outFields, crs = "ESRI:102690") @@ -244,12 +245,10 @@ REST query. ## Output Coordinate Reference System: PROJCS["NAD_1983_StatePlane_Michigan_South_FIPS_2113_Feet",GEOGCS["GCS_North_American_1983",DATUM["North_American_Datum_1983",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["False_Easting",13123333.33333333],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-84.36666666666666],PARAMETER["Standard_Parallel_1",42.1],PARAMETER["Standard_Parallel_2",43.66666666666666],PARAMETER["Latitude_Of_Origin",41.5],UNIT["Foot_US",0.30480060960121924],AUTHORITY["EPSG","102690"]] -While the given output CRS was different for each they all are just -different standard CRS formulations of ESRI:102690. This can be proven -by the following function that calculated the mean difference in X-Y -coordinates at each point. All are very close to 0. +Their similarity on the output CRS can be proven by the following +function that calculates the mean difference in X-Y coordinates at each +point. All are very close to 0. - #Difference in coordinates are all basically 0 coord_diff <- function(df1, df2) { suppressWarnings({ c( diff --git a/vignettes/get_started.Rmd b/vignettes/get_started.Rmd index 5bf4577..9792d8e 100644 --- a/vignettes/get_started.Rmd +++ b/vignettes/get_started.Rmd @@ -71,3 +71,61 @@ where <- "STATE_NAME = 'Michigan'" df <- esri2sf(url, where=where, outFields=c("POP2000", "pop2007", "POP00_SQMI", "POP07_SQMI")) plot(df) ``` + + + +### Tabular data + +You can download non-spatial tables of the 'Table' layer type using `esri2df()`. + +```{r tables} +df <- esri2df('https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/WaterTemplate/WaterDistributionInventoryReport/MapServer/5', objectIds = paste(1:50, collapse = ",")) +df +``` + + +### `crs` parameter example + +When specifying the CRS parameter, any transformation that happens will be done within ESRI's REST API. Caution should be taken when specifying an output `crs` that requires a datum transformation as ESRI will automatically apply a default transformation (with no feedback as to which one) which could end up adding small unexpected errors into your data. By default, `esri2sf()` will transform any datasource to WGS 1984 (EPSG:4326), but it may be safer to set `crs = NULL` which will return the data in the same CRS as it is being hosted as in the Feature/Map Service. That way you can control any transformation manually in a known, reproducible manner. + +```{r} +url <- "https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/3" +where <- "STATE_NAME = 'Michigan'" +outFields <- c("POP2000", "pop2007", "POP00_SQMI", "POP07_SQMI") + +#default crs = 4326 +esri2sf(url, where = where, outFields = outFields) + +#No transformation (recommended) +esri2sf(url, where = where, outFields = outFields, crs = NULL) +``` + + +Also since the addition of the `WKT1_ESRI` output from sf::st_crs() in sf version 1.0-1, you can enter common CRS format (any that sf::st_crs() can handle) into the `crs` parameters and it will be able to convert to the ESRI formatted WKT needed for the outSR field in the REST query. Below are examples of the variety of input types that you can use with the `crs` parameters. All examples are just different formulations of the ESRI:102690 CRS. + +```{r} +#ESRI Authority Code +df1 <- esri2sf(url, where = where, outFields = outFields, crs = "ESRI:102690") +#PROJ string +df2 <- esri2sf(url, where = where, outFields = outFields, crs = "+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +datum=NAD83 +units=us-ft +no_defs") +#OGC WKT +df3 <- esri2sf(url, where = where, outFields = outFields, crs = 'PROJCS["NAD_1983_StatePlane_Michigan_South_FIPS_2113_Feet",GEOGCS["GCS_North_American_1983",DATUM["North_American_Datum_1983",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["False_Easting",13123333.33333333],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-84.36666666666666],PARAMETER["Standard_Parallel_1",42.1],PARAMETER["Standard_Parallel_2",43.66666666666666],PARAMETER["Latitude_Of_Origin",41.5],UNIT["Foot_US",0.30480060960121924],AUTHORITY["EPSG","102690"]]') +``` + +Their similarity on the output CRS can be proven by the following function that calculates the mean difference in X-Y coordinates at each point. All are very close to 0. +```{r} +coord_diff <- function(df1, df2) { + suppressWarnings({ + c( + "x" = mean(sf::st_coordinates(sf::st_cast(df1, "POINT"))[,1] - sf::st_coordinates(sf::st_cast(df2, "POINT"))[,1]), + "y" = mean(sf::st_coordinates(sf::st_cast(df1, "POINT"))[,2] - sf::st_coordinates(sf::st_cast(df2, "POINT"))[,2]) + ) + }) +} +coord_diff(df1, df2) +coord_diff(df1, df3) +coord_diff(df2, df3) + +``` + +