Skip to content

Instantly share code, notes, and snippets.

@ateucher
Last active April 25, 2019 23:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ateucher/86674e12ffba66ecce87cceb7bffbf41 to your computer and use it in GitHub Desktop.
Save ateucher/86674e12ffba66ecce87cceb7bffbf41 to your computer and use it in GitHub Desktop.
# remotes::install_github("bcgov/bcdata", ref = "promise")
library(bcdata)
library(ggplot2)

Use bcdc_get_data() to get an entire dataset. I wouldn't recommend this for really large datasets like the FWA:

bcdc_get_data("bc-airports")
#> Simple feature collection with 455 features and 41 fields
#> geometry type:  POINT
#> dimension:      XY
#> bbox:           xmin: 406543.7 ymin: 367957.6 xmax: 1796645 ymax: 1689146
#> epsg (SRID):    3005
#> proj4string:    +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
#> # A tibble: 455 x 42
#>    id    CUSTODIAN_ORG_D… BUSINESS_CATEGO… BUSINESS_CATEGO…
#>    <chr> <chr>            <chr>            <chr>           
#>  1 WHSE… "Ministry of Fo… airTransportati… Air Transportat…
#>  2 WHSE… "Ministry of Fo… airTransportati… Air Transportat…
#>  3 WHSE… "Ministry of Fo… airTransportati… Air Transportat…
#>  4 WHSE… "Ministry of Fo… airTransportati… Air Transportat…
#>  5 WHSE… "Ministry of Fo… airTransportati… Air Transportat…
#>  6 WHSE… "Ministry of Fo… airTransportati… Air Transportat…
#>  7 WHSE… "Ministry of Fo… airTransportati… Air Transportat…
#>  8 WHSE… "Ministry of Fo… airTransportati… Air Transportat…
#>  9 WHSE… "Ministry of Fo… airTransportati… Air Transportat…
#> 10 WHSE… "Ministry of Fo… airTransportati… Air Transportat…
#> # … with 445 more rows, and 38 more variables:
#> #   OCCUPANT_TYPE_DESCRIPTION <chr>, SOURCE_DATA_ID <chr>,
#> #   SUPPLIED_SOURCE_ID_IND <chr>, AIRPORT_NAME <chr>, DESCRIPTION <chr>,
#> #   PHYSICAL_ADDRESS <chr>, ALIAS_ADDRESS <chr>, STREET_ADDRESS <chr>,
#> #   POSTAL_CODE <chr>, LOCALITY <chr>, CONTACT_PHONE <chr>,
#> #   CONTACT_EMAIL <chr>, CONTACT_FAX <chr>, WEBSITE_URL <chr>,
#> #   IMAGE_URL <chr>, LATITUDE <dbl>, LONGITUDE <dbl>, KEYWORDS <chr>,
#> #   DATE_UPDATED <date>, SITE_GEOCODED_IND <chr>, AERODROME_STATUS <chr>,
#> #   AIRCRAFT_ACCESS_IND <chr>, DATA_SOURCE <chr>, DATA_SOURCE_YEAR <chr>,
#> #   ELEVATION <dbl>, FUEL_AVAILABILITY_IND <chr>,
#> #   HELICOPTER_ACCESS_IND <chr>, IATA_CODE <chr>, ICAO_CODE <chr>,
#> #   MAX_RUNWAY_LENGTH <dbl>, NUMBER_OF_RUNWAYS <int>,
#> #   OIL_AVAILABILITY_IND <chr>, RUNWAY_SURFACE <chr>,
#> #   SEAPLANE_ACCESS_IND <chr>, TC_LID_CODE <chr>, SEQUENCE_ID <int>,
#> #   SE_ANNO_CAD_DATA <chr>, geometry <POINT [m]>

Use bcdc_query_geodata() combined with filter and select to send a query to the server and only return a subset of the dataset. We mimic the dbplyr workflow in that the request isn't actually sent until collect() is called:

bcdc_query_geodata("freshwater-atlas-stream-network")
#> # A BC Data Catalogue Record: 4907249 records and 28 columns
#> # Columns:
#> # A tibble: 28 x 4
#>    col_name                selectable remote_col_type        local_col_type
#>    <chr>                   <lgl>      <chr>                  <chr>         
#>  1 id                      FALSE      xsd:string             character     
#>  2 LINEAR_FEATURE_ID       FALSE      xsd:decimal            numeric       
#>  3 WATERSHED_GROUP_ID      FALSE      xsd:decimal            numeric       
#>  4 EDGE_TYPE               FALSE      xsd:decimal            numeric       
#>  5 BLUE_LINE_KEY           TRUE       xsd:decimal            numeric       
#>  6 WATERSHED_KEY           TRUE       xsd:decimal            numeric       
#>  7 FWA_WATERSHED_CODE      TRUE       xsd:string             character     
#>  8 LOCAL_WATERSHED_CODE    TRUE       xsd:string             character     
#>  9 WATERSHED_GROUP_CODE    FALSE      xsd:string             character     
#> 10 DOWNSTREAM_ROUTE_MEASU… TRUE       xsd:decimal            numeric       
#> 11 LENGTH_METRE            FALSE      xsd:decimal            numeric       
#> 12 FEATURE_SOURCE          FALSE      xsd:string             character     
#> 13 GNIS_ID                 TRUE       xsd:decimal            numeric       
#> 14 GNIS_NAME               TRUE       xsd:string             character     
#> 15 LEFT_RIGHT_TRIBUTARY    TRUE       xsd:string             character     
#> 16 STREAM_ORDER            FALSE      xsd:decimal            numeric       
#> 17 STREAM_MAGNITUDE        FALSE      xsd:decimal            numeric       
#> 18 WATERBODY_KEY           TRUE       xsd:decimal            numeric       
#> 19 BLUE_LINE_KEY_50K       TRUE       xsd:decimal            numeric       
#> 20 WATERSHED_CODE_50K      TRUE       xsd:string             character     
#> 21 WATERSHED_KEY_50K       TRUE       xsd:decimal            numeric       
#> 22 WATERSHED_GROUP_CODE_5… TRUE       xsd:string             character     
#> 23 GRADIENT                TRUE       xsd:decimal            numeric       
#> 24 FEATURE_CODE            FALSE      xsd:string             character     
#> 25 OBJECTID                FALSE      xsd:decimal            numeric       
#> 26 SE_ANNO_CAD_DATA        TRUE       xsd:hexBinary          numeric       
#> 27 FEATURE_LENGTH_M        TRUE       xsd:decimal            numeric       
#> 28 geometry                TRUE       gml:GeometryPropertyT… geom

filter:

bcdc_query_geodata("freshwater-atlas-stream-network") %>% 
    filter(GNIS_NAME %in% c("Hiellen River", "Sangan River"))
#> # A BC Data Catalogue Record: 55 records and 28 columns
#> # Columns:
#> # A tibble: 28 x 4
#>    col_name                selectable remote_col_type        local_col_type
#>    <chr>                   <lgl>      <chr>                  <chr>         
#>  1 id                      FALSE      xsd:string             character     
#>  2 LINEAR_FEATURE_ID       FALSE      xsd:decimal            numeric       
#>  3 WATERSHED_GROUP_ID      FALSE      xsd:decimal            numeric       
#>  4 EDGE_TYPE               FALSE      xsd:decimal            numeric       
#>  5 BLUE_LINE_KEY           TRUE       xsd:decimal            numeric       
#>  6 WATERSHED_KEY           TRUE       xsd:decimal            numeric       
#>  7 FWA_WATERSHED_CODE      TRUE       xsd:string             character     
#>  8 LOCAL_WATERSHED_CODE    TRUE       xsd:string             character     
#>  9 WATERSHED_GROUP_CODE    FALSE      xsd:string             character     
#> 10 DOWNSTREAM_ROUTE_MEASU… TRUE       xsd:decimal            numeric       
#> 11 LENGTH_METRE            FALSE      xsd:decimal            numeric       
#> 12 FEATURE_SOURCE          FALSE      xsd:string             character     
#> 13 GNIS_ID                 TRUE       xsd:decimal            numeric       
#> 14 GNIS_NAME               TRUE       xsd:string             character     
#> 15 LEFT_RIGHT_TRIBUTARY    TRUE       xsd:string             character     
#> 16 STREAM_ORDER            FALSE      xsd:decimal            numeric       
#> 17 STREAM_MAGNITUDE        FALSE      xsd:decimal            numeric       
#> 18 WATERBODY_KEY           TRUE       xsd:decimal            numeric       
#> 19 BLUE_LINE_KEY_50K       TRUE       xsd:decimal            numeric       
#> 20 WATERSHED_CODE_50K      TRUE       xsd:string             character     
#> 21 WATERSHED_KEY_50K       TRUE       xsd:decimal            numeric       
#> 22 WATERSHED_GROUP_CODE_5… TRUE       xsd:string             character     
#> 23 GRADIENT                TRUE       xsd:decimal            numeric       
#> 24 FEATURE_CODE            FALSE      xsd:string             character     
#> 25 OBJECTID                FALSE      xsd:decimal            numeric       
#> 26 SE_ANNO_CAD_DATA        TRUE       xsd:hexBinary          numeric       
#> 27 FEATURE_LENGTH_M        TRUE       xsd:decimal            numeric       
#> 28 geometry                TRUE       gml:GeometryPropertyT… geom

select:

bcdc_query_geodata("freshwater-atlas-stream-network") %>% 
  filter(GNIS_NAME %in% c("Hiellen River", "Sangan River")) %>% 
  select(FWA_WATERSHED_CODE, GNIS_NAME)
#> # A BC Data Catalogue Record: 55 records and 14 columns
#> # Columns:
#> # A tibble: 14 x 4
#>    col_name             selectable remote_col_type          local_col_type
#>    <chr>                <lgl>      <chr>                    <chr>         
#>  1 id                   FALSE      xsd:string               character     
#>  2 LINEAR_FEATURE_ID    FALSE      xsd:decimal              numeric       
#>  3 WATERSHED_GROUP_ID   FALSE      xsd:decimal              numeric       
#>  4 EDGE_TYPE            FALSE      xsd:decimal              numeric       
#>  5 FWA_WATERSHED_CODE   TRUE       xsd:string               character     
#>  6 WATERSHED_GROUP_CODE FALSE      xsd:string               character     
#>  7 LENGTH_METRE         FALSE      xsd:decimal              numeric       
#>  8 FEATURE_SOURCE       FALSE      xsd:string               character     
#>  9 GNIS_NAME            TRUE       xsd:string               character     
#> 10 STREAM_ORDER         FALSE      xsd:decimal              numeric       
#> 11 STREAM_MAGNITUDE     FALSE      xsd:decimal              numeric       
#> 12 FEATURE_CODE         FALSE      xsd:string               character     
#> 13 OBJECTID             FALSE      xsd:decimal              numeric       
#> 14 geometry             TRUE       gml:GeometryPropertyType geom

collect to send the request and get an sf object:

just_my_streams <- bcdc_query_geodata("freshwater-atlas-stream-network") %>% 
  filter(GNIS_NAME %in% c("Hiellen River", "Sangan River")) %>% 
  select(FWA_WATERSHED_CODE, GNIS_NAME) %>% 
  collect()

ggplot() +
  geom_sf(data = just_my_streams, color = "steelblue", size = 0.5) 

Created on 2019-04-25 by the reprex package (v0.2.1)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment