wkt = FALSE,
  odkc_version = get_default_odkc_version()



(dataframe) A dataframe with a geotrace column.


(chr) The name of the geotrace 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 geotrace 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 geotrace columns.


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

The format of the geotrace (GeoJSON, WKT, ODK Linestring) is determined via parameters wkt and odkc_version, rather than inferred from the class of the column. ODK Linestrings are character vectors without a leading "LINESTRING (", WKT are character vectors with a leading "LINESTRING (", and GeoJSON are list columns.

See also


if (FALSE) { library(magrittr) data("geo_fs") data("geo_wkt_raw") data("geo_gj_raw") # Find variable names of geotraces geo_fields <- geo_fs %>% dplyr::filter(type == "geotrace") %>% magrittr::extract2("ruodk_name") geo_fields[1] # First geotrace in data: path_location_path_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 geotrace split gj_first_gt <- split_geotrace(geo_gj_rt, geo_fields[1], wkt = FALSE) testthat::expect_true( "path_location_path_gps_longitude" %in% names(gj_first_gt) ) testthat::expect_true( "path_location_path_gps_latitude" %in% names(gj_first_gt) ) testthat::expect_true( "path_location_path_gps_altitude" %in% names(gj_first_gt) ) testthat::expect_true( is.numeric(gj_first_gt$path_location_path_gps_longitude) ) testthat::expect_true( is.numeric(gj_first_gt$path_location_path_gps_latitude) ) testthat::expect_true( is.numeric(gj_first_gt$path_location_path_gps_altitude) ) wkt_first_gt <- split_geotrace(geo_wkt_rt, geo_fields[1], wkt = TRUE) testthat::expect_true( "path_location_path_gps_longitude" %in% names(wkt_first_gt) ) testthat::expect_true( "path_location_path_gps_latitude" %in% names(wkt_first_gt) ) testthat::expect_true( "path_location_path_gps_altitude" %in% names(wkt_first_gt) ) testthat::expect_true( is.numeric(wkt_first_gt$path_location_path_gps_longitude) ) testthat::expect_true( is.numeric(wkt_first_gt$path_location_path_gps_latitude) ) testthat::expect_true( is.numeric(wkt_first_gt$path_location_path_gps_altitude) ) }