Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to download single country data if spatialtype is specified #75

Closed
richardtc opened this issue Dec 29, 2023 · 2 comments
Closed
Labels
documentation Improvements or additions to documentation

Comments

@richardtc
Copy link

Entire dataset downloads if any spatialtype is specified.
E.g.,

khm01 <- gisco_get_countries(resolution = "01", country = "KHM", spatialtype = "INLAND", cache_dir = "downloads/gisco")
plot(st_geometry(khm01))

R version 4.3.2 (2023-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.3 LTS
giscoR_0.4.0

@dieghernan
Copy link
Member

Hi,

Yes, thta's expected since the "INLAND dataset as provided by GISCO is not labelled in a consistent way, and the parameter country is ignored. I should document this better, I think.

Long explanation

There is a variable in that dataset named CNTR_CODE , but it just includes one of the countries to which the border belongs to. This makes very difficult to extract all the borders of a single country with a filter. Let me explain:

library(giscoR)
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1; sf_use_s2() is TRUE
library(tidyverse)

khm01 <- gisco_get_countries(resolution = "01", country = "KHM", spatialtype = "INLAND", cache_dir = "downloads/gisco")
plot(st_geometry(khm01))

This is where you are at this moment. See the variables of the dataset.

glimpse(khm01)
#> Rows: 540
#> Columns: 11
#> $ EU_FLAG      <chr> "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F…
#> $ OTHR_FLAG    <chr> "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T…
#> $ COAS_FLAG    <chr> "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F…
#> $ FID          <dbl> 2279, 6149, 6175, 6902, 6435, 6911, 6914, 6307, 6555, 505…
#> $ EFTA_FLAG    <chr> "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F…
#> $ CC_FLAG      <chr> "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F…
#> $ CNTR_BN_ID   <dbl> 2279, 6149, 6175, 6902, 6435, 6911, 6914, 6307, 6555, 505…
#> $ POL_STAT     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
#> $ CNTR_BN_CODE <dbl> 2279, 6149, 6175, 6902, 6435, 6911, 6914, 6307, 6555, 505…
#> $ CNTR_CODE    <chr> "CL", "SZ", "BO", "ZA", "PY", "NA", "PY", "ZA", "ZA", "BR…
#> $ geometry     <LINESTRING [°]> LINESTRING (-68.60748 -54.8..., LINESTRING (32…

One may think that filtering by CNTR_CODE == "KH" would be enough, but check this. If I get which borders touches with the country polygon...

khm_cntry <- gisco_get_countries(resolution = "01", country = "KHM", cache_dir = "downloads/gisco")

# Get actual borders

inlands <- khm01[st_intersects(khm01, khm_cntry, sparse = FALSE), ]

inlands
#> Simple feature collection with 5 features and 10 fields
#> Geometry type: LINESTRING
#> Dimension:     XY
#> Bounding box:  xmin: 102.1439 ymin: 10.40613 xmax: 107.704 ymax: 22.40069
#> Geodetic CRS:  WGS 84
#>     EU_FLAG OTHR_FLAG COAS_FLAG   FID EFTA_FLAG CC_FLAG CNTR_BN_ID POL_STAT
#> 135       F         T         F 18321         F       F      18321        0
#> 152       F         T         F 19933         F       F      19933        0
#> 165       F         T         F 18184         F       F      18184        0
#> 197       F         T         F 17582         F       F      17582        0
#> 288       F         T         F 21207         F       F      21207        0
#>     CNTR_BN_CODE CNTR_CODE                       geometry
#> 135        18321        VN LINESTRING (107.5561 14.686...
#> 152        19933        LA LINESTRING (105.2001 14.342...
#> 165        18184        TH LINESTRING (102.9109 11.647...
#> 197        17582        VN LINESTRING (106.4434 11.822...
#> 288        21207        VN LINESTRING (102.1439 22.400...

# Get by id
library(ggplot2)
ggplot(inlands) +
  geom_sf(aes(color = as_factor(CNTR_BN_ID)))

Note that the borders seems to be right, however CNTR_CODE has values only for Thailand, Laos and Vietnam (TH LA, VN). What we can do is filter by CNTR_BN_CODE to get only the borders of interest (visually).

# Final inland of Cambodia
inland_KHM <- inlands %>%
  filter(CNTR_BN_ID != 21207)

ggplot(inland_KHM) +
  geom_sf(aes(color = as_factor(CNTR_BN_ID)))

Created on 2024-01-04 with reprex v2.0.2

@dieghernan dieghernan added the documentation Improvements or additions to documentation label Jan 4, 2024
@dieghernan
Copy link
Member

See also #50 , very similar issue with another dataset

@dieghernan dieghernan mentioned this issue Jan 5, 2024
@dieghernan dieghernan added not-downloading Data is not downloaded from the server and removed not-downloading Data is not downloaded from the server labels Jan 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

2 participants