split_geoshape(data, colname, wkt = FALSE, odkc_version = odkc_version)



(dataframe) A dataframe with a geoshape column.


(chr) The name of the geoshape column. This column will be retained.


Whether geofields are GeoJSON (if FALSE) or WKT strings (if TRUE), default: FALSE.


The ODK Central version as decimal number (major.minor). ruODK uses this parameter to adjust for breaking changes in ODK Central.

Default: get_default_odkc_version or 1.1 if unset.

Set default get_default_odkc_version through ru_setup(odkc_version=1.1).

See vignette("Setup", package = "ruODK").


The given dataframe with the geoshape column colname, plus three new columns, colname_longitude, colname_latitude, colname_altitude. The three new columns are prefixed with the original colname to avoid naming conflicts with any other geoshape columns.


This function is used by handle_ru_geopoints on all geopoint fields as per form_schema.

See also


if (FALSE) { library(magrittr) data("geo_fs") data("geo_wkt_raw") data("geo_gj_raw") # Find variable names of geoshapes geo_fields <- geo_fs %>% dplyr::filter(type == "geoshape") %>% magrittr::extract2("ruodk_name") geo_fields[1] # First geoshape in data: shape_location_shape_gps # Rectangle but don't parse submission data (GeoJSON and WKT) geo_gj_rt <- geo_gj_raw %>% odata_submission_rectangle(form_schema = geo_fs) geo_wkt_rt <- geo_wkt_raw %>% odata_submission_rectangle(form_schema = geo_fs) # Data with first geoshape split gj_first_gt <- split_geoshape(geo_gj_rt, geo_fields[1], wkt = FALSE) cn_gj <- names(gj_first_gt) testthat::expect_true("shape_location_shape_gps_longitude" %in% cn_gj) testthat::expect_true("shape_location_shape_gps_latitude" %in% cn_gj) testthat::expect_true("shape_location_shape_gps_altitude" %in% cn_gj) testthat::expect_true( is.numeric(gj_first_gt$shape_location_shape_gps_longitude) ) testthat::expect_true( is.numeric(gj_first_gt$shape_location_shape_gps_latitude) ) testthat::expect_true( is.numeric(gj_first_gt$shape_location_shape_gps_altitude) ) wkt_first_gt <- split_geoshape(geo_wkt_rt, geo_fields[1], wkt = TRUE) cn_wkt <- names(wkt_first_gt) testthat::expect_true("shape_location_shape_gps_longitude" %in% cn_wkt) testthat::expect_true("shape_location_shape_gps_latitude" %in% cn_wkt) testthat::expect_true("shape_location_shape_gps_altitude" %in% cn_wkt) testthat::expect_true( is.numeric(wkt_first_gt$shape_location_shape_gps_longitude) ) testthat::expect_true( is.numeric(wkt_first_gt$shape_location_shape_gps_latitude) ) testthat::expect_true( is.numeric(wkt_first_gt$shape_location_shape_gps_altitude) ) }