From d6cc45845ed08e60649e76019251a1300168f55a Mon Sep 17 00:00:00 2001 From: dcooley Date: Sun, 15 Mar 2020 06:30:56 +1100 Subject: [PATCH 1/7] close #77 --- DESCRIPTION | 7 ++----- src/Makevars | 2 +- src/Makevars.win | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index db3b18a..7c34462 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Package: geojsonsf Type: Package Title: GeoJSON to Simple Feature Converter -Version: 1.3.2 -Date: 2019-04-24 +Version: 1.4.0 +Date: 2020-03-15 Authors@R: c( person("David", "Cooley", ,"dcooley@symbolix.com.au", role = c("aut", "cre")) ) @@ -14,7 +14,6 @@ Encoding: UTF-8 LazyData: true Depends: R (>= 3.3.0) LinkingTo: - BH, jsonify (>= 0.2.1), rapidjsonr (>= 1.1), Rcpp, @@ -29,6 +28,4 @@ Suggests: knitr, rmarkdown, testthat -Remotes: - github::dcooley/sfheaders VignetteBuilder: knitr diff --git a/src/Makevars b/src/Makevars index 962bd1d..e932cb1 100644 --- a/src/Makevars +++ b/src/Makevars @@ -1,4 +1,4 @@ CXX_STD = CXX11 PKG_CXXFLAGS = -I../inst/include/ -PKG_CPPFLAGS=-DSTRICT_R_HEADERS -DBOOST_NO_AUTO_PTR +PKG_CPPFLAGS=-DSTRICT_R_HEADERS diff --git a/src/Makevars.win b/src/Makevars.win index 962bd1d..e932cb1 100644 --- a/src/Makevars.win +++ b/src/Makevars.win @@ -1,4 +1,4 @@ CXX_STD = CXX11 PKG_CXXFLAGS = -I../inst/include/ -PKG_CPPFLAGS=-DSTRICT_R_HEADERS -DBOOST_NO_AUTO_PTR +PKG_CPPFLAGS=-DSTRICT_R_HEADERS From cb0d10011f3513f19e794ac96460183008b61b6d Mon Sep 17 00:00:00 2001 From: dcooley Date: Sun, 15 Mar 2020 06:36:30 +1100 Subject: [PATCH 2/7] description & news --- DESCRIPTION | 2 +- NEWS.md | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7c34462..86f8fe7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: geojsonsf Type: Package Title: GeoJSON to Simple Feature Converter -Version: 1.4.0 +Version: 1.3.3 Date: 2020-03-15 Authors@R: c( person("David", "Cooley", ,"dcooley@symbolix.com.au", role = c("aut", "cre")) diff --git a/NEWS.md b/NEWS.md index 4687030..90e2d20 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,9 @@ +## v1.3.3 + +* removed Boost links + + ## v1.3.2 * using `rapidjson::FileReadStream` to read large files from disk [issue 64](https://github.com/SymbolixAU/geojsonsf/issues/64) From 834347ae94dc9eda5f9faebb7d378bab8d0de557 Mon Sep 17 00:00:00 2001 From: dcooley Date: Sat, 14 Mar 2020 13:19:47 -0700 Subject: [PATCH 3/7] R_xlen_t --- DESCRIPTION | 2 +- inst/include/geojsonsf/geojson/api/df_api.hpp | 42 +++++++++---------- inst/include/geojsonsf/geojson/api/sf_api.hpp | 38 ++++++++--------- .../geojsonsf/geojson/geojson_properties.hpp | 2 +- inst/include/geojsonsf/geojson/parse.hpp | 6 +-- .../geojson/writers/write_geojson.hpp | 8 +++- .../geojsonsf/geojson/writers/writers.hpp | 12 +++--- inst/include/geojsonsf/sf/sfg/geojson_sfg.hpp | 10 ++--- man/df_geojson.Rd | 13 +++++- man/geojson_sf.Rd | 9 +++- man/geojson_sfc.Rd | 9 +++- man/sf_geojson.Rd | 9 +++- src/geojson_to_wkt.cpp | 6 +-- src/geojson_wkt.cpp | 12 +++--- 14 files changed, 103 insertions(+), 75 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 86f8fe7..fdb8ac8 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -21,7 +21,7 @@ LinkingTo: Imports: curl, Rcpp -RoxygenNote: 6.1.1 +RoxygenNote: 7.0.2 Suggests: covr, jsonify, diff --git a/inst/include/geojsonsf/geojson/api/df_api.hpp b/inst/include/geojsonsf/geojson/api/df_api.hpp index e63a45a..7801da8 100644 --- a/inst/include/geojsonsf/geojson/api/df_api.hpp +++ b/inst/include/geojsonsf/geojson/api/df_api.hpp @@ -23,19 +23,19 @@ namespace api { rapidjson::StringBuffer sb; rapidjson::Writer < rapidjson::StringBuffer > writer( sb ); - int n_cols = df.ncol(); - int n_rows = df.nrows(); - int i, j; + R_xlen_t n_cols = df.ncol(); + R_xlen_t n_rows = df.nrows(); + R_xlen_t i, j; Rcpp::StringVector column_names = df.names(); // the sfc_POINT R_xlen_t n_geometry_columns = geometry_columns.size(); Rcpp::List geometry_vectors( n_geometry_columns ); - int n_properties = n_cols - n_geometry_columns; + R_xlen_t n_properties = n_cols - n_geometry_columns; Rcpp::StringVector property_names( n_properties ); - for( i = 0; i < n_geometry_columns; i++ ) { + for( i = 0; i < n_geometry_columns; ++i ) { Rcpp::String this_geometry = geometry_columns[i]; geometry_vectors[i] = df[ this_geometry ]; } @@ -43,12 +43,12 @@ namespace api { std::string dim = sfheaders::sfg::sfg_dimension( n_geometry_columns ); Rcpp::CharacterVector cls = Rcpp::CharacterVector::create( dim , "POINT", "sfg"); - int property_counter = 0; + R_xlen_t property_counter = 0; - for ( i = 0; i < df.length(); i++ ) { + for ( i = 0; i < df.length(); ++i ) { Rcpp::String this_column = column_names[i]; - int idx = sfheaders::utils::where_is( this_column, geometry_columns ); + R_xlen_t idx = sfheaders::utils::where_is( this_column, geometry_columns ); if ( idx == -1 ) { // i.e. it's not in the vector property_names[property_counter] = column_names[i]; @@ -61,7 +61,7 @@ namespace api { writer.StartArray(); - for( i = 0; i < n_rows; i++ ) { + for( i = 0; i < n_rows; ++i ) { writer.StartObject(); @@ -70,7 +70,7 @@ namespace api { writer.StartObject(); // properties first, then sfc - for( j = 0; j < n_properties; j++ ) { + for( j = 0; j < n_properties; ++j ) { const char *h = property_names[ j ]; SEXP this_vec = df[ h ]; @@ -82,7 +82,7 @@ namespace api { writer.String("geometry"); Rcpp::NumericVector geom( n_geometry_columns ); - for ( j = 0; j < n_geometry_columns; j++ ) { + for ( j = 0; j < n_geometry_columns; ++j ) { Rcpp::NumericVector this_geometry_vector = geometry_vectors[j]; geom[j] = this_geometry_vector[i]; } @@ -106,9 +106,9 @@ namespace api { int& digits, bool& factors_as_string ) { - int n_cols = df.ncol(); - int n_rows = df.nrows(); - int i, j; + R_xlen_t n_cols = df.ncol(); + R_xlen_t n_rows = df.nrows(); + R_xlen_t i, j; Rcpp::StringVector column_names = df.names(); Rcpp::StringVector geojson( n_rows ); @@ -117,10 +117,10 @@ namespace api { R_xlen_t n_geometry_columns = geometry_columns.size(); Rcpp::List geometry_vectors( n_geometry_columns ); - int n_properties = n_cols - n_geometry_columns; + R_xlen_t n_properties = n_cols - n_geometry_columns; Rcpp::StringVector property_names( n_properties ); - for ( i = 0; i < n_geometry_columns; i++ ) { + for ( i = 0; i < n_geometry_columns; ++i ) { Rcpp::String this_geometry = geometry_columns[i]; geometry_vectors[i] = df[ this_geometry ]; } @@ -128,8 +128,8 @@ namespace api { std::string dim = sfheaders::sfg::sfg_dimension( n_geometry_columns ); Rcpp::CharacterVector cls = Rcpp::CharacterVector::create( dim , "POINT", "sfg"); - int property_counter = 0; - for ( i = 0; i < df.length(); i++) { + R_xlen_t property_counter = 0; + for ( i = 0; i < df.length(); ++i) { Rcpp::String this_column = column_names[i]; int idx = sfheaders::utils::where_is( this_column, geometry_columns ); @@ -142,7 +142,7 @@ namespace api { } - for( i = 0; i < n_rows; i++ ) { + for( i = 0; i < n_rows; ++i ) { rapidjson::StringBuffer sb; rapidjson::Writer < rapidjson::StringBuffer > writer( sb ); @@ -155,7 +155,7 @@ namespace api { writer.StartObject(); // properties first, then sfc - for( j = 0; j < n_properties; j++ ) { + for( j = 0; j < n_properties; ++j ) { const char *h = property_names[ j ]; SEXP this_vec = df[ h ]; @@ -172,7 +172,7 @@ namespace api { } Rcpp::NumericVector geom( n_geometry_columns ); - for ( j = 0; j < n_geometry_columns; j++ ) { + for ( j = 0; j < n_geometry_columns; ++j ) { Rcpp::NumericVector this_geometry_vector = geometry_vectors[j]; geom[j] = this_geometry_vector[i]; } diff --git a/inst/include/geojsonsf/geojson/api/sf_api.hpp b/inst/include/geojsonsf/geojson/api/sf_api.hpp index c24e18a..7ac7436 100644 --- a/inst/include/geojsonsf/geojson/api/sf_api.hpp +++ b/inst/include/geojsonsf/geojson/api/sf_api.hpp @@ -13,12 +13,12 @@ namespace api { inline Rcpp::StringVector sfc_to_geojson( Rcpp::List& sfc, int& digits ) { // atomise - each row is a separate GeoJSON string - int n_rows = sfc.size(); - int i; + R_xlen_t n_rows = sfc.size(); + R_xlen_t i; Rcpp::StringVector geojson( n_rows ); - for( i = 0; i < n_rows; i++ ) { + for( i = 0; i < n_rows; ++i ) { rapidjson::StringBuffer sb; rapidjson::Writer < rapidjson::StringBuffer > writer( sb ); @@ -41,15 +41,15 @@ namespace api { std::string geom_column = sf.attr("sf_column"); - int n_cols = sf.ncol(); - int n_properties = n_cols - 1; - int n_rows = sf.nrows(); - int i, j; + R_xlen_t n_cols = sf.ncol(); + R_xlen_t n_properties = n_cols - 1; + R_xlen_t n_rows = sf.nrows(); + R_xlen_t i, j; Rcpp::StringVector column_names = sf.names(); Rcpp::StringVector property_names(sf.size() - 1); - int property_counter = 0; - for ( i = 0; i < sf.length(); i++) { + R_xlen_t property_counter = 0; + for ( i = 0; i < sf.length(); ++i) { if (column_names[i] != geom_column) { property_names[property_counter] = column_names[i]; property_counter++; @@ -61,14 +61,14 @@ namespace api { writer.StartArray(); - for( i = 0; i < n_rows; i++ ) { + for( i = 0; i < n_rows; ++i ) { writer.StartObject(); geojsonsf::writers::start_features( writer ); geojsonsf::writers::start_properties( writer ); writer.StartObject(); // properties first, then sfc - for( j = 0; j < n_properties; j++ ) { + for( j = 0; j < n_properties; ++j ) { const char *h = property_names[ j ]; SEXP this_vec = sf[ h ]; @@ -105,24 +105,24 @@ namespace api { std::string geom_column = sf.attr("sf_column"); - int n_cols = sf.ncol(); - int n_properties = n_cols - 1; - int n_rows = sf.nrows(); - int i, j; + R_xlen_t n_cols = sf.ncol(); + R_xlen_t n_properties = n_cols - 1; + R_xlen_t n_rows = sf.nrows(); + R_xlen_t i, j; Rcpp::StringVector column_names = sf.names(); Rcpp::StringVector property_names(sf.size() - 1); Rcpp::StringVector geojson( n_rows ); - int property_counter = 0; - for (int i = 0; i < sf.length(); i++) { + R_xlen_t property_counter = 0; + for (i = 0; i < sf.length(); ++i) { if (column_names[i] != geom_column) { property_names[property_counter] = column_names[i]; property_counter++; } } - for( i = 0; i < n_rows; i++ ) { + for( i = 0; i < n_rows; ++i ) { rapidjson::StringBuffer sb; rapidjson::Writer < rapidjson::StringBuffer > writer( sb ); @@ -135,7 +135,7 @@ namespace api { writer.StartObject(); // properties first, then sfc - for( j = 0; j < n_properties; j++ ) { + for( j = 0; j < n_properties; ++j ) { const char *h = property_names[ j ]; SEXP this_vec = sf[ h ]; diff --git a/inst/include/geojsonsf/geojson/geojson_properties.hpp b/inst/include/geojsonsf/geojson/geojson_properties.hpp index 29df2ea..3e6b0ae 100644 --- a/inst/include/geojsonsf/geojson/geojson_properties.hpp +++ b/inst/include/geojsonsf/geojson/geojson_properties.hpp @@ -73,7 +73,7 @@ namespace geojson_properties { std::vector< std::string > sv( n.size() ); unsigned int i; - for( i = 0; i < n.size(); i++ ) { + for( i = 0; i < n.size(); ++i ) { sv[i] = n[i]; } properties.names() = sv; diff --git a/inst/include/geojsonsf/geojson/parse.hpp b/inst/include/geojsonsf/geojson/parse.hpp index 3c5d3bb..8862c4a 100644 --- a/inst/include/geojsonsf/geojson/parse.hpp +++ b/inst/include/geojsonsf/geojson/parse.hpp @@ -71,7 +71,7 @@ namespace parse { unsigned int i; Rcpp::List geom_collection(n); - for (i = 0; i < n; i++) { + for (i = 0; i < n; ++i) { const Value& gcval = geometries[i]; geojsonsf::validate::validate_type(gcval, sfg_objects); geom_type = gcval["type"].GetString(); @@ -147,7 +147,7 @@ namespace parse { } std::string s; - for ( i = 0; i < geomsize; i++ ) { + for ( i = 0; i < geomsize; ++i ) { //https://stackoverflow.com/a/33473321/5977215 if ( expand_geometries ) { s = std::to_string( sfg_objects - i ); @@ -190,7 +190,7 @@ namespace parse { Rcpp::List feature_collection(n); - for ( i = 0; i < n; i++ ) { + for ( i = 0; i < n; ++i ) { const Value& feature = features[i]; feature_collection[i] = parse_feature_object( feature, bbox, z_range, m_range, geometry_types, sfg_objects, property_keys, doc_properties, diff --git a/inst/include/geojsonsf/geojson/writers/write_geojson.hpp b/inst/include/geojsonsf/geojson/writers/write_geojson.hpp index 675d9ee..ae335e5 100644 --- a/inst/include/geojsonsf/geojson/writers/write_geojson.hpp +++ b/inst/include/geojsonsf/geojson/writers/write_geojson.hpp @@ -40,7 +40,9 @@ namespace write_geojson { } else if (geom_type == "GEOMETRYCOLLECTION") { Rcpp::List gc = Rcpp::as< Rcpp::List >( sfg ); Rcpp::List sfgi(1); - for (int i = 0; i < gc.size(); i++) { + R_xlen_t i; + R_xlen_t gc_n = gc.size(); + for ( i = 0; i < gc_n; ++i) { sfgi[0] = gc[i]; std::string gc_geom_type; bool isnull = false; @@ -96,7 +98,9 @@ namespace write_geojson { } else if (geom_type == "GEOMETRYCOLLECTION") { Rcpp::List gc = Rcpp::as< Rcpp::List >( sfg ); Rcpp::List sfgi(1); - for (int i = 0; i < gc.size(); i++) { + R_xlen_t i; + R_xlen_t gc_n = gc.size(); + for ( i = 0; i < gc_n; ++i ) { sfgi[0] = gc[i]; std::string gc_geom_type; diff --git a/inst/include/geojsonsf/geojson/writers/writers.hpp b/inst/include/geojsonsf/geojson/writers/writers.hpp index c5bbee4..3bd00ce 100644 --- a/inst/include/geojsonsf/geojson/writers/writers.hpp +++ b/inst/include/geojsonsf/geojson/writers/writers.hpp @@ -120,7 +120,7 @@ namespace writers { int i; int value; writer.StartArray(); - for ( i = 0; i < n; i++ ) { + for ( i = 0; i < n; ++i ) { value = point[i]; if( R_IsNA( value ) ) { writer.Null(); @@ -142,7 +142,7 @@ namespace writers { int i; double value; writer.StartArray(); - for ( i = 0; i < n; i++ ) { + for ( i = 0; i < n; ++i ) { value = point[i]; if( R_IsNA( value ) ) { @@ -189,7 +189,7 @@ namespace writers { inline void linestring_to_geojson( Writer& writer, Rcpp::IntegerMatrix& line, int digits ) { int i; int nrow = line.nrow(); - for ( i = 0; i < nrow; i++ ) { + for ( i = 0; i < nrow; ++i ) { Rcpp::IntegerVector this_row = line(i, Rcpp::_ ); points_to_geojson( writer, this_row, digits ); } @@ -204,7 +204,7 @@ namespace writers { inline void linestring_to_geojson( Writer& writer, Rcpp::NumericMatrix& line, int digits ) { int i; int nrow = line.nrow(); - for ( i = 0; i < nrow; i++ ) { + for ( i = 0; i < nrow; ++i ) { Rcpp::NumericVector this_row = line(i, Rcpp::_ ); points_to_geojson( writer, this_row, digits ); } @@ -240,7 +240,7 @@ namespace writers { inline void polygon_to_geojson( Writer& writer, Rcpp::List& sfg, int digits ) { int i; int n = sfg.size(); - for ( i = 0; i < n; i++ ) { + for ( i = 0; i < n; ++i ) { Rcpp::NumericMatrix sfgi = sfg[i]; linestring_to_geojson( writer, sfgi, digits ); line_separator( writer, i, n ); @@ -256,7 +256,7 @@ namespace writers { inline void multi_polygon_to_geojson( Writer& writer, Rcpp::List& sfg, int digits ) { int i; int n = sfg.size(); - for ( i = 0; i < n; i++ ) { + for ( i = 0; i < n; ++i ) { Rcpp::List sfgi = sfg[i]; polygon_to_geojson( writer, sfgi, digits ); polygon_separator( writer, i, n ); diff --git a/inst/include/geojsonsf/sf/sfg/geojson_sfg.hpp b/inst/include/geojsonsf/sf/sfg/geojson_sfg.hpp index 3171369..f89b18c 100644 --- a/inst/include/geojsonsf/sf/sfg/geojson_sfg.hpp +++ b/inst/include/geojsonsf/sf/sfg/geojson_sfg.hpp @@ -54,7 +54,7 @@ namespace sfg { Rcpp::IntegerVector iv ) { R_xlen_t i; - for ( i = 0; i < n; i++ ) { + for ( i = 0; i < n; ++i ) { iv[i] = point_array[i].GetDouble(); } } @@ -68,7 +68,7 @@ namespace sfg { Rcpp::NumericVector& m_range ) { R_xlen_t i; - for ( i = 0; i < n; i++ ) { + for ( i = 0; i < n; ++i ) { geojsonsf::validate::validate_point(point_array[i]); nv[i] = point_array[i].GetDouble(); } @@ -221,7 +221,7 @@ namespace sfg { Rcpp::List ml( n ); R_xlen_t j; R_xlen_t max_dimension = 2; - for ( j = 0; j < n; j++ ) { + for ( j = 0; j < n; ++j ) { R_xlen_t max_cols = 2; geojsonsf::validate::validate_array( multi_line_array[j] ); get_line_string( multi_line_array[j], bbox, z_range, m_range, ml, j, false, attribute, max_cols ); @@ -251,7 +251,7 @@ namespace sfg { Rcpp::List pl( n ); R_xlen_t j; R_xlen_t max_dimension = 2; - for ( j = 0; j < n; j++ ) { + for ( j = 0; j < n; ++j ) { R_xlen_t max_cols = 2; geojsonsf::validate::validate_array( polygon_array[j] ); get_line_string( polygon_array[j], bbox, z_range, m_range, pl, j, false, "", max_cols ); @@ -284,7 +284,7 @@ namespace sfg { R_xlen_t j, k; R_xlen_t max_dimension = 2; - for ( j = 0; j < n; j++ ) { + for ( j = 0; j < n; ++j ) { const Value& polygon_array = multi_polygon_array[j]; geojsonsf::validate::validate_array( polygon_array ); R_xlen_t np = polygon_array.Size(); diff --git a/man/df_geojson.Rd b/man/df_geojson.Rd index 1a1663c..ce118e7 100644 --- a/man/df_geojson.Rd +++ b/man/df_geojson.Rd @@ -4,8 +4,17 @@ \alias{df_geojson} \title{df to GeoJSON} \usage{ -df_geojson(df, lon, lat, z = NULL, m = NULL, atomise = FALSE, - simplify = TRUE, digits = NULL, factors_as_string = TRUE) +df_geojson( + df, + lon, + lat, + z = NULL, + m = NULL, + atomise = FALSE, + simplify = TRUE, + digits = NULL, + factors_as_string = TRUE +) } \arguments{ \item{df}{data.frame} diff --git a/man/geojson_sf.Rd b/man/geojson_sf.Rd index bd5a1bb..1f3368f 100644 --- a/man/geojson_sf.Rd +++ b/man/geojson_sf.Rd @@ -4,8 +4,13 @@ \alias{geojson_sf} \title{Geojson to sf} \usage{ -geojson_sf(geojson, expand_geometries = FALSE, crs = NULL, - proj4string = NULL, buffer_size = 1024) +geojson_sf( + geojson, + expand_geometries = FALSE, + crs = NULL, + proj4string = NULL, + buffer_size = 1024 +) } \arguments{ \item{geojson}{string or vector of GeoJSON, or a URL or file pointing to a geojson file} diff --git a/man/geojson_sfc.Rd b/man/geojson_sfc.Rd index c5305fc..6da7924 100644 --- a/man/geojson_sfc.Rd +++ b/man/geojson_sfc.Rd @@ -4,8 +4,13 @@ \alias{geojson_sfc} \title{Geojson to sfc} \usage{ -geojson_sfc(geojson, expand_geometries = FALSE, crs = NULL, - proj4string = NULL, buffer_size = 1024) +geojson_sfc( + geojson, + expand_geometries = FALSE, + crs = NULL, + proj4string = NULL, + buffer_size = 1024 +) } \arguments{ \item{geojson}{string or vector of GeoJSON, or a URL or file pointing to a geojson file} diff --git a/man/sf_geojson.Rd b/man/sf_geojson.Rd index 221d5d8..653028a 100644 --- a/man/sf_geojson.Rd +++ b/man/sf_geojson.Rd @@ -4,8 +4,13 @@ \alias{sf_geojson} \title{sf to GeoJSON} \usage{ -sf_geojson(sf, atomise = FALSE, simplify = TRUE, digits = NULL, - factors_as_string = TRUE) +sf_geojson( + sf, + atomise = FALSE, + simplify = TRUE, + digits = NULL, + factors_as_string = TRUE +) } \arguments{ \item{sf}{simple feature object} diff --git a/src/geojson_to_wkt.cpp b/src/geojson_to_wkt.cpp index cb116e1..4735298 100644 --- a/src/geojson_to_wkt.cpp +++ b/src/geojson_to_wkt.cpp @@ -90,7 +90,7 @@ Rcpp::List parse_geometry_collection_object_wkt( Rcpp::List geom_collection(n); Rcpp::List geom_collection_wkt(1); - for (i = 0; i < n; i++) { + for (i = 0; i < n; ++i) { const Value& gcval = geometries[i]; geojsonsf::validate::validate_type(gcval, wkt_objects); geom_type = gcval["type"].GetString(); @@ -100,7 +100,7 @@ Rcpp::List parse_geometry_collection_object_wkt( // collapse into a single WKT string std::ostringstream os; os << "GEOMETRYCOLLECTION ("; - for (i = 0; i < n; i++) { + for (i = 0; i < n; ++i) { std::string g = geom_collection[i]; os << g; coord_separator(os, i, n); @@ -197,7 +197,7 @@ Rcpp::List parse_feature_collection_object_wkt( R_xlen_t i; Rcpp::List feature_collection(n); - for (i = 0; i < n; i++) { + for (i = 0; i < n; ++i) { const Value& feature = features[i]; feature_collection[i] = parse_feature_object_wkt( feature, geometry_types, wkt_objects, property_keys, doc_properties, diff --git a/src/geojson_wkt.cpp b/src/geojson_wkt.cpp index f30bb03..cd6ddde 100644 --- a/src/geojson_wkt.cpp +++ b/src/geojson_wkt.cpp @@ -111,7 +111,7 @@ void point_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& co Rcpp::stop("geojsonsf - different coordinate dimensions found"); } R_xlen_t i; - for( i = 0; i < n; i++ ) { + for( i = 0; i < n; ++i ) { if( i > 0 ) { os << " "; } @@ -123,7 +123,7 @@ void point_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& co void multi_point_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& coord_dim ) { size_t n = coord_array.Size(); unsigned int i; - for (i = 0; i < n; i++) { + for (i = 0; i < n; ++i) { geojsonsf::validate::validate_array(coord_array[i]); point_to_wkt(os, coord_array[i], coord_dim ); coord_separator(os, i, n); @@ -133,7 +133,7 @@ void multi_point_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen void line_string_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& coord_dim) { size_t n = coord_array.Size(); unsigned int i; - for (i = 0; i < n; i++) { + for (i = 0; i < n; ++i) { geojsonsf::validate::validate_array(coord_array[i]); point_to_wkt(os, coord_array[i], coord_dim ); coord_separator(os, i, n); @@ -143,7 +143,7 @@ void line_string_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen void multi_line_string_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& coord_dim) { size_t n = coord_array.Size(); unsigned int i; - for (i = 0; i < n; i++) { + for (i = 0; i < n; ++i) { geojsonsf::validate::validate_array(coord_array[i]); line_string_to_wkt(os, coord_array[i], coord_dim ); line_separator_wkt(os, i, n); @@ -153,7 +153,7 @@ void multi_line_string_to_wkt(std::ostringstream& os, const Value& coord_array, void polygon_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& coord_dim) { size_t n = coord_array.Size(); unsigned int i; - for (i = 0; i < n; i++) { + for (i = 0; i < n; ++i) { geojsonsf::validate::validate_array(coord_array[i]); line_string_to_wkt(os, coord_array[i], coord_dim ); line_separator_wkt(os, i, n); @@ -163,7 +163,7 @@ void polygon_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& void multi_polygon_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& coord_dim) { size_t n = coord_array.Size(); unsigned int i; - for (i = 0; i < n; i++) { + for (i = 0; i < n; ++i) { geojsonsf::validate::validate_array(coord_array[i]); polygon_to_wkt(os, coord_array[i], coord_dim); polygon_separate_wkt(os, i, n); From fda0b6c15bf5903610264168e3faeaf2968e2c58 Mon Sep 17 00:00:00 2001 From: dcooley Date: Sat, 14 Mar 2020 13:22:18 -0700 Subject: [PATCH 4/7] R_xlen_t --- .../geojsonsf/geojson/geojson_properties.hpp | 6 +++--- src/geojson_wkt.cpp | 20 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/inst/include/geojsonsf/geojson/geojson_properties.hpp b/inst/include/geojsonsf/geojson/geojson_properties.hpp index 3e6b0ae..6103f5a 100644 --- a/inst/include/geojsonsf/geojson/geojson_properties.hpp +++ b/inst/include/geojsonsf/geojson/geojson_properties.hpp @@ -127,17 +127,17 @@ namespace geojson_properties { sf[key] = nv; } - inline Rcpp::NumericVector na_numeric_vector(const size_t& n_elements) { + inline Rcpp::NumericVector na_numeric_vector(const R_xlen_t& n_elements) { Rcpp::NumericVector nv(n_elements, NA_REAL); return nv; } - inline Rcpp::StringVector na_string_vector(const size_t& n_elements) { + inline Rcpp::StringVector na_string_vector(const R_xlen_t& n_elements) { Rcpp::StringVector sv(n_elements, Rcpp::StringVector::get_na()); return sv; } - inline Rcpp::LogicalVector na_logical_vector(const size_t& n_elements) { + inline Rcpp::LogicalVector na_logical_vector(const R_xlen_t& n_elements) { Rcpp::LogicalVector lv(n_elements, NA_LOGICAL); return lv; } diff --git a/src/geojson_wkt.cpp b/src/geojson_wkt.cpp index cd6ddde..d1e793e 100644 --- a/src/geojson_wkt.cpp +++ b/src/geojson_wkt.cpp @@ -121,8 +121,8 @@ void point_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& co void multi_point_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& coord_dim ) { - size_t n = coord_array.Size(); - unsigned int i; + R_xlen_t n = coord_array.Size(); + R_xlen_t i; for (i = 0; i < n; ++i) { geojsonsf::validate::validate_array(coord_array[i]); point_to_wkt(os, coord_array[i], coord_dim ); @@ -131,8 +131,8 @@ void multi_point_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen } void line_string_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& coord_dim) { - size_t n = coord_array.Size(); - unsigned int i; + R_xlen_t n = coord_array.Size(); + R_xlen_t i; for (i = 0; i < n; ++i) { geojsonsf::validate::validate_array(coord_array[i]); point_to_wkt(os, coord_array[i], coord_dim ); @@ -141,8 +141,8 @@ void line_string_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen } void multi_line_string_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& coord_dim) { - size_t n = coord_array.Size(); - unsigned int i; + R_xlen_t n = coord_array.Size(); + R_xlen_t i; for (i = 0; i < n; ++i) { geojsonsf::validate::validate_array(coord_array[i]); line_string_to_wkt(os, coord_array[i], coord_dim ); @@ -151,8 +151,8 @@ void multi_line_string_to_wkt(std::ostringstream& os, const Value& coord_array, } void polygon_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& coord_dim) { - size_t n = coord_array.Size(); - unsigned int i; + R_xlen_t n = coord_array.Size(); + R_xlen_t i; for (i = 0; i < n; ++i) { geojsonsf::validate::validate_array(coord_array[i]); line_string_to_wkt(os, coord_array[i], coord_dim ); @@ -161,8 +161,8 @@ void polygon_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& } void multi_polygon_to_wkt(std::ostringstream& os, const Value& coord_array, R_xlen_t& coord_dim) { - size_t n = coord_array.Size(); - unsigned int i; + R_xlen_t n = coord_array.Size(); + R_xlen_t i; for (i = 0; i < n; ++i) { geojsonsf::validate::validate_array(coord_array[i]); polygon_to_wkt(os, coord_array[i], coord_dim); From 968a89c5fce0bcae3145b04035b7f48db31269d9 Mon Sep 17 00:00:00 2001 From: dcooley Date: Sun, 15 Mar 2020 16:58:19 +1100 Subject: [PATCH 5/7] Description --- DESCRIPTION | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index fdb8ac8..3a2165b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -14,7 +14,7 @@ Encoding: UTF-8 LazyData: true Depends: R (>= 3.3.0) LinkingTo: - jsonify (>= 0.2.1), + jsonify (>= 1.1.1), rapidjsonr (>= 1.1), Rcpp, sfheaders (>= 0.1.0) @@ -24,7 +24,6 @@ Imports: RoxygenNote: 7.0.2 Suggests: covr, - jsonify, knitr, rmarkdown, testthat From c71d532a7a421c540c4d3c8bf4e9a7391455ccb6 Mon Sep 17 00:00:00 2001 From: dcooley Date: Sun, 15 Mar 2020 01:53:30 -0700 Subject: [PATCH 6/7] R_xlen_t and stuff --- R/scratch.R | 160 ------------------ inst/include/geojsonsf/geojson/api/df_api.hpp | 2 +- .../geojsonsf/geojson/geojson_properties.hpp | 2 +- .../geojsonsf/geojson/geojson_to_sf.hpp | 2 +- inst/include/geojsonsf/geojson/parse.hpp | 16 +- .../geojsonsf/geojson/writers/writers.hpp | 28 +-- inst/include/geojsonsf/wkt/geojson_wkt.hpp | 2 +- src/geojson_wkt.cpp | 6 +- 8 files changed, 29 insertions(+), 189 deletions(-) delete mode 100644 R/scratch.R diff --git a/R/scratch.R b/R/scratch.R deleted file mode 100644 index 46dee29..0000000 --- a/R/scratch.R +++ /dev/null @@ -1,160 +0,0 @@ -# -# -# library(sf) -# -# pt1 <- sf::st_sf( geometry = sf::st_sfc( sf::st_point(c(0,0)))) -# mp1 <- sf::st_sf( geometry = sf::st_sfc( sf::st_multipoint(x = matrix(1:6, ncol = 2)))) -# mp2 <- sf::st_sf( geometry = sf::st_sfc( sf::st_multipoint(x = matrix(1:6, ncol = 3)))) -# mp3 <- sf::st_sf( geometry = sf::st_sfc( sf::st_multipoint(x = matrix(1:8, ncol = 4)))) -# pt2 <- sf::st_sf( geometry = sf::st_sfc( sf::st_point(c(1,1,3,4)))) -# ls1 <- sf::st_sf( geometry = sf::st_sfc( sf::st_linestring(x = matrix(1:6, ncol = 2)))) -# ls2 <- sf::st_sf( geometry = sf::st_sfc( sf::st_linestring(x = matrix(1:6, ncol = 3)))) -# mls1 <- sf::st_sf( geometry = sf::st_sfc( sf::st_multilinestring(x = list(matrix(1:6, ncol = 2), matrix(6:1, ncol = 2), matrix(1:6, ncol = 2))))) -# -# js <- '{"type":"MultiPolygon","coordinates":[[[[0.0,0.0],[0.0,1.0],[1.0,1.0],[1.0,0.0],[0.0,0.0]],[[0.5,0.5],[0.5,0.75],[0.75,0.75],[0.75,0.5],[0.5,0.5]]],[[[2.0,2.0],[2.0,3.0],[3.0,3.0],[3.0,2.0],[2.0,2.0]]]]}' -# mp <- geojson_sf( js ) -# sf::st_crs( mp ) <- sf::st_crs( mls1 ) -# -# sf <- rbind(pt1, mp1, mp2, mp3, pt2, ls1, ls2, mls1, mp) -# sf$id <- 1:nrow(sf) -# -# sf_geojson( sf ) -# -# -# geojsonsf:::rcpp_sf_to_geojson_downcast( sf[1, ] ) -# geojsonsf:::rcpp_sf_to_geojson_downcast( sf[2, ] ) -# -# geojsonsf:::rcpp_sf_to_geojson_downcast( sf[9, ] ) -# -# - - - - -# nc <- sf::st_read(system.file("shape/nc.shp", package="sf")) -# nc_poly <- sf::st_cast( nc, to = "POLYGON" ) -# -# nc[4, ] -# geo <- geojsonsf:::rcpp_sf_to_geojson_downcast( nc[4, ] ) -# sf <- geojsonsf::geojson_sf( geo ) -# sf - - - - - - - - - -# -# sf -# nc_poly -# -# geojsonsf:::rcpp_sf_to_geojson_downcast( nc[4, ]) -# -# -# nc <- sf::st_read(system.file("shape/nc.shp", package="sf")) -# -# geo_down <- geojsonsf:::rcpp_sf_to_geojson_downcast( nc ) -# sf_down <- geojsonsf::geojson_sf( geo_down ) -# -# library(microbenchmark) -# -# microbenchmark( -# sf = { -# nc_poly <- sf::st_cast( nc, to = "POLYGON") -# geo_poly <- geojsonsf::sf_geojson( nc_poly ) -# }, -# geojsonsf = { -# geo_sf <- geojsonsf:::rcpp_sf_to_geojson_downcast( nc ) -# }, -# times = 5 -# ) -# -# # Unit: milliseconds -# # expr min lq mean median uq max neval -# # sf 16.019968 16.952798 20.264359 17.283295 19.396397 31.669338 5 -# # geojsonsf 2.348934 2.597222 3.203101 2.847933 3.017071 5.204344 5 -# -# microbenchmark( -# sf = { -# nc_poly <- sf::st_cast( nc, to = "POLYGON") -# geo_poly <- geojsonsf::sf_geojson( nc_poly ) -# }, -# geojsonsf = { -# geo_sf <- geojsonsf:::rcpp_sf_to_geojson_downcast( nc ) -# nc2 <- geojsonsf::geojson_sf( geo_sf ) -# }, -# times = 5 -# ) -# -# # Unit: milliseconds -# # expr min lq mean median uq max neval -# # sf 13.75293 14.42003 16.96273 14.93394 15.38814 26.31861 5 -# # geojsonsf 10.78687 11.34112 11.60321 11.63283 11.75583 12.49937 5 -# -# sf$geometry -# -# types <- vapply(sf$geometry, function(x) class(x)[[2]], "") -# downcast <- gsub("MULTI","",types) -# -# types[ types != downcast ] -# -# matrix(c(types, downcast), ncol = 2) -# -# ## given the geometry type (MULTIPIONT, MULTILINESTRING, MULTIPOLYGON) -# ## calculate how many of each POINT, LINESTRING, POLYGON are within the MULTI -# -# dim( sf[2, 'geometry'][[1]][[1]] ) -# -# dim( sf[8, 'geometry'][[1]][[1]][[1]] ) -# -# -# library(Rcpp) -# -# ## -# -# cppFunction('int mls_multiplier( Rcpp::List mls ) { -# int multiplier = 1; -# return mls.size(); -# }') -# -# mls_multiplier( sf[8, ]$geometry[[1]] ) -# -# cppFunction('int mp_multiplier( Rcpp::NumericMatrix mp ){ -# return mp.nrow(); -# }') -# -# mp_multiplier( sf[2, ]$geometry[[1]] ) -# mp_multiplier( sf[3, ]$geometry[[1]] ) -# mp_multiplier( sf[4, ]$geometry[[1]] ) -# -# cppFunction('int mpoly_multiplier( Rcpp::List mp ){ -# -# Rcpp::List pl = mp[0]; -# return pl.size(); -# -# return mp.size(); -# int multiplier = 1; -# for( int i = 0; i < mp.size(); i++ ) { -# Rcpp::List poly = mp[i]; -# multiplier = multiplier + poly.size(); -# } -# return multiplier; -# }') -# -# mpoly_multiplier( sf[9, ]$geometry ) -# -# mpoly_multiplier( nc[4, ]$geometry ) -# -# sf_geojson(sf[9,]) - - - -# sf <- geojsonsf:::rcpp_read_sf_file_stream(normalizePath("~/Downloads/Texas.geojson"), FALSE) - -# writeLines(mapdeck::geojson, "~/Desktop/geo_melbourne.json") - -# sf <- geojsonsf::geojson_sf( "~/Desktop/geo_melbourne.json" ) -# sfc <- geojsonsf::geojson_sfc( "~/Desktop/geo_melbourne.json" ) diff --git a/inst/include/geojsonsf/geojson/api/df_api.hpp b/inst/include/geojsonsf/geojson/api/df_api.hpp index 7801da8..7d3d7a1 100644 --- a/inst/include/geojsonsf/geojson/api/df_api.hpp +++ b/inst/include/geojsonsf/geojson/api/df_api.hpp @@ -132,7 +132,7 @@ namespace api { for ( i = 0; i < df.length(); ++i) { Rcpp::String this_column = column_names[i]; - int idx = sfheaders::utils::where_is( this_column, geometry_columns ); + R_xlen_t idx = sfheaders::utils::where_is( this_column, geometry_columns ); if ( idx == -1 ) { // i.e. it's not in the vector diff --git a/inst/include/geojsonsf/geojson/geojson_properties.hpp b/inst/include/geojsonsf/geojson/geojson_properties.hpp index 6103f5a..f5ced15 100644 --- a/inst/include/geojsonsf/geojson/geojson_properties.hpp +++ b/inst/include/geojsonsf/geojson/geojson_properties.hpp @@ -71,7 +71,7 @@ namespace geojson_properties { std::vector< std::string > n = properties.names(); std::reverse( n.begin(), n.end() ); std::vector< std::string > sv( n.size() ); - unsigned int i; + R_xlen_t i; for( i = 0; i < n.size(); ++i ) { sv[i] = n[i]; diff --git a/inst/include/geojsonsf/geojson/geojson_to_sf.hpp b/inst/include/geojsonsf/geojson/geojson_to_sf.hpp index dc905bb..95c79f9 100644 --- a/inst/include/geojsonsf/geojson/geojson_to_sf.hpp +++ b/inst/include/geojsonsf/geojson/geojson_to_sf.hpp @@ -41,7 +41,7 @@ namespace sf { Rcpp::List sf(1); Rcpp::List sfc(1); Rcpp::List properties(1); - unsigned int doc_ele; + R_xlen_t doc_ele; if (d.IsObject()) { Rcpp::List sfg(1); diff --git a/inst/include/geojsonsf/geojson/parse.hpp b/inst/include/geojsonsf/geojson/parse.hpp index 8862c4a..eef1320 100644 --- a/inst/include/geojsonsf/geojson/parse.hpp +++ b/inst/include/geojsonsf/geojson/parse.hpp @@ -67,8 +67,8 @@ namespace parse { std::string geom_type; geojsonsf::validate::validate_geometries(val, sfg_objects); auto geometries = val["geometries"].GetArray(); - unsigned int n = geometries.Size(); - unsigned int i; + R_xlen_t n = geometries.Size(); + R_xlen_t i; Rcpp::List geom_collection(n); for (i = 0; i < n; ++i) { @@ -137,8 +137,8 @@ namespace parse { geojsonsf::geojson_properties::get_property_keys(p, property_keys); geojsonsf::geojson_properties::get_property_types(p, property_types); - unsigned int geomsize = 1; - unsigned int i; + R_xlen_t geomsize = 1; + R_xlen_t i; if (expand_geometries && type == "GeometryCollection") { geojsonsf::validate::validate_geometries( geometry, sfg_objects ); @@ -185,8 +185,8 @@ namespace parse { auto features = fc["features"].GetArray(); - unsigned int n = features.Size(); // number of features - unsigned int i; + R_xlen_t n = features.Size(); // number of features + R_xlen_t i; Rcpp::List feature_collection(n); @@ -204,7 +204,7 @@ namespace parse { const Value& v, Rcpp::List& sfc, Rcpp::List& properties, - int i, + R_xlen_t i, Rcpp::NumericVector& bbox, Rcpp::NumericVector& z_range, Rcpp::NumericVector& m_range, @@ -279,7 +279,7 @@ namespace parse { Document& d, Rcpp::List& sfc, Rcpp::List& properties, - int i, + R_xlen_t i, Rcpp::NumericVector& bbox, Rcpp::NumericVector& z_range, Rcpp::NumericVector& m_range, diff --git a/inst/include/geojsonsf/geojson/writers/writers.hpp b/inst/include/geojsonsf/geojson/writers/writers.hpp index 3bd00ce..727b29b 100644 --- a/inst/include/geojsonsf/geojson/writers/writers.hpp +++ b/inst/include/geojsonsf/geojson/writers/writers.hpp @@ -97,7 +97,7 @@ namespace writers { } template< typename Writer > - inline void polygon_separator( Writer& writer, int i, int n ) { + inline void polygon_separator( Writer& writer, R_xlen_t i, R_xlen_t n ) { if (i < ( n - 1 ) ) { writer.EndArray(); writer.EndArray(); @@ -107,7 +107,7 @@ namespace writers { } template< typename Writer > - inline void line_separator( Writer& writer, int i, int n) { + inline void line_separator( Writer& writer, R_xlen_t i, R_xlen_t n) { if ( i < ( n - 1 ) ) { writer.EndArray(); writer.StartArray(); @@ -116,8 +116,8 @@ namespace writers { template< typename Writer > inline void points_to_geojson( Writer& writer, Rcpp::IntegerVector& point, int digits ) { - int n = point.size(); - int i; + R_xlen_t n = point.size(); + R_xlen_t i; int value; writer.StartArray(); for ( i = 0; i < n; ++i ) { @@ -138,8 +138,8 @@ namespace writers { template< typename Writer > inline void points_to_geojson( Writer& writer, Rcpp::NumericVector& point, int digits ) { - int n = point.size(); - int i; + R_xlen_t n = point.size(); + R_xlen_t i; double value; writer.StartArray(); for ( i = 0; i < n; ++i ) { @@ -187,8 +187,8 @@ namespace writers { template< typename Writer > inline void linestring_to_geojson( Writer& writer, Rcpp::IntegerMatrix& line, int digits ) { - int i; - int nrow = line.nrow(); + R_xlen_t i; + R_xlen_t nrow = line.nrow(); for ( i = 0; i < nrow; ++i ) { Rcpp::IntegerVector this_row = line(i, Rcpp::_ ); points_to_geojson( writer, this_row, digits ); @@ -202,8 +202,8 @@ namespace writers { template< typename Writer > inline void linestring_to_geojson( Writer& writer, Rcpp::NumericMatrix& line, int digits ) { - int i; - int nrow = line.nrow(); + R_xlen_t i; + R_xlen_t nrow = line.nrow(); for ( i = 0; i < nrow; ++i ) { Rcpp::NumericVector this_row = line(i, Rcpp::_ ); points_to_geojson( writer, this_row, digits ); @@ -238,8 +238,8 @@ namespace writers { template< typename Writer > inline void polygon_to_geojson( Writer& writer, Rcpp::List& sfg, int digits ) { - int i; - int n = sfg.size(); + R_xlen_t i; + R_xlen_t n = sfg.size(); for ( i = 0; i < n; ++i ) { Rcpp::NumericMatrix sfgi = sfg[i]; linestring_to_geojson( writer, sfgi, digits ); @@ -254,8 +254,8 @@ namespace writers { template< typename Writer > inline void multi_polygon_to_geojson( Writer& writer, Rcpp::List& sfg, int digits ) { - int i; - int n = sfg.size(); + R_xlen_t i; + R_xlen_t n = sfg.size(); for ( i = 0; i < n; ++i ) { Rcpp::List sfgi = sfg[i]; polygon_to_geojson( writer, sfgi, digits ); diff --git a/inst/include/geojsonsf/wkt/geojson_wkt.hpp b/inst/include/geojsonsf/wkt/geojson_wkt.hpp index 18e39aa..2439b96 100644 --- a/inst/include/geojsonsf/wkt/geojson_wkt.hpp +++ b/inst/include/geojsonsf/wkt/geojson_wkt.hpp @@ -5,7 +5,7 @@ #include "rapidjson/document.h" using namespace rapidjson; -void coord_separator(std::ostringstream& os, int i, int n); +void coord_separator(std::ostringstream& os, R_xlen_t i, R_xlen_t n); void begin_wkt(std::ostringstream& os, std::string& geom_type, R_xlen_t& coord_dim ); diff --git a/src/geojson_wkt.cpp b/src/geojson_wkt.cpp index d1e793e..ad31aef 100644 --- a/src/geojson_wkt.cpp +++ b/src/geojson_wkt.cpp @@ -64,19 +64,19 @@ void object_separator(std::ostringstream& os) { os << ","; } -void coord_separator(std::ostringstream& os, int i, int n) { +void coord_separator(std::ostringstream& os, R_xlen_t i, R_xlen_t n) { if (i < (n - 1) ) { os << ","; } } -void line_separator_wkt(std::ostringstream& os, int i, int n) { +void line_separator_wkt(std::ostringstream& os, R_xlen_t i, R_xlen_t n) { if (i < (n - 1) ) { os << "),("; } } -void polygon_separate_wkt(std::ostringstream& os, int i, int n) { +void polygon_separate_wkt(std::ostringstream& os, R_xlen_t i, R_xlen_t n) { if (i < (n - 1) ) { os << ")),(("; } From 13593a7a9377942e02861860fc10e74a81bcfa96 Mon Sep 17 00:00:00 2001 From: dcooley Date: Sun, 15 Mar 2020 21:27:28 +1100 Subject: [PATCH 7/7] still finding revdeps --- inst/include/geojsonsf/geojson/api/df_api.hpp | 5 +- inst/include/geojsonsf/geojson/api/sf_api.hpp | 27 +- .../geojsonsf/geojson/geojson_properties.hpp | 22 +- .../geojsonsf/geojson/geojson_to_sf.hpp | 7 +- .../geojsonsf/geojson/geojson_validate.hpp | 71 +- inst/include/geojsonsf/geojson/parse.hpp | 4 +- .../geojsonsf/geojson/write_geometry.hpp | 25 +- .../geojson/writers/write_geojson.hpp | 3 +- .../geojsonsf/geojson/writers/writers.hpp | 4 +- .../geometrycollection/geometrycollection.hpp | 7 +- inst/include/geojsonsf/wkt/geojson_wkt.hpp | 2 +- revdep/README.md | 30 + .../TargomoR/TargomoR_0.2.0.tar.gz | Bin 0 -> 106112 bytes .../TargomoR/new/TargomoR.Rcheck/00check.log | 54 + .../new/TargomoR.Rcheck/00install.out | 13 + .../new/TargomoR.Rcheck/TargomoR-Ex.R | 268 ++ .../new/TargomoR.Rcheck/TargomoR-Ex.Rout | 547 ++++ .../new/TargomoR.Rcheck/TargomoR-Ex.pdf | Bin 0 -> 3611 bytes .../new/TargomoR.Rcheck/tests/startup.Rs | 4 + .../new/TargomoR.Rcheck/tests/testthat.R | 4 + .../new/TargomoR.Rcheck/tests/testthat.Rout | 38 + .../tests/testthat/print-capabilities.txt | 30 + .../TargomoR.Rcheck/tests/testthat/test-api.R | 218 ++ .../tests/testthat/test-basemaps.R | 43 + .../tests/testthat/test-other.R | 130 + .../tests/testthat/test-polygons.R | 70 + .../tests/testthat/test-routes.R | 103 + .../tests/testthat/test-times.R | 96 + .../checks.noindex/TargomoR/new/libraries.txt | 91 + .../TargomoR/old/TargomoR.Rcheck/00check.log | 54 + .../old/TargomoR.Rcheck/00install.out | 13 + .../old/TargomoR.Rcheck/TargomoR-Ex.R | 268 ++ .../old/TargomoR.Rcheck/TargomoR-Ex.Rout | 547 ++++ .../old/TargomoR.Rcheck/TargomoR-Ex.pdf | Bin 0 -> 3611 bytes .../old/TargomoR.Rcheck/tests/startup.Rs | 4 + .../old/TargomoR.Rcheck/tests/testthat.R | 4 + .../old/TargomoR.Rcheck/tests/testthat.Rout | 38 + .../tests/testthat/print-capabilities.txt | 30 + .../TargomoR.Rcheck/tests/testthat/test-api.R | 218 ++ .../tests/testthat/test-basemaps.R | 43 + .../tests/testthat/test-other.R | 130 + .../tests/testthat/test-polygons.R | 70 + .../tests/testthat/test-routes.R | 103 + .../tests/testthat/test-times.R | 96 + .../checks.noindex/TargomoR/old/libraries.txt | 91 + .../checks.noindex/echor/echor_0.1.4.tar.gz | Bin 0 -> 1572048 bytes .../echor/new/echor.Rcheck/00check.log | 61 + .../echor/new/echor.Rcheck/00install.out | 15 + .../echor/new/echor.Rcheck/echor-Ex.R | 171 ++ .../echor/new/echor.Rcheck/echor-Ex.Rout | 193 ++ .../echor/new/echor.Rcheck/echor-Ex.pdf | Bin 0 -> 3611 bytes .../echor/new/echor.Rcheck/tests/spelling.R | 3 + .../new/echor.Rcheck/tests/spelling.Rout | 25 + .../echor/new/echor.Rcheck/tests/startup.Rs | 4 + .../echor/new/echor.Rcheck/tests/testthat.R | 3 + .../new/echor.Rcheck/tests/testthat.Rout | 26 + .../air_rest_services.get_download-f98011.csv | 2 + ...est_services.get_facility_info-96582d.json | 52 + ...est_services.get_facility_info-fdcbbc.json | 52 + .../air_rest_services.get_geojson-4d487a.json | 25 + .../air_rest_services.metadata-a4f118.json | 1071 ++++++++ ...ll_rpt_rest_services.get_caapr-75a2fe.json | 2074 ++++++++++++++ .../cwa_rest_services.get_download-279954.csv | 2 + .../cwa_rest_services.get_download-371b75.csv | 2 + ...est_services.get_facility_info-3c5df1.json | 72 + ...est_services.get_facility_info-3ebb0f.json | 52 + ...est_services.get_facility_info-5daf35.json | 54 + .../cwa_rest_services.get_geojson-1b9acd.json | 42 + .../cwa_rest_services.metadata-a4f118.json | 2423 +++++++++++++++++ ...ervices.download_effluent_chart-81e3b7.csv | 381 +++ .../rest_lookups.cwa_parameters-78a7fd.json | 11 + .../rest_lookups.cwa_parameters-e1774c.json | 27 + .../sdw_rest_services.get_download-cd93dc.csv | 40 + .../sdw_rest_services.get_systems-c651ad.json | 16 + .../sdw_rest_services.metadata-a4f118.json | 575 ++++ .../new/echor.Rcheck/tests/testthat/helper.R | 1 + .../tests/testthat/test-expected_errors.R | 25 + .../tests/testthat/test-expected_objects.R | 110 + revdep/checks.noindex/echor/new/libraries.txt | 105 + .../echor/old/echor.Rcheck/00check.log | 61 + .../echor/old/echor.Rcheck/00install.out | 15 + .../echor/old/echor.Rcheck/echor-Ex.R | 171 ++ .../echor/old/echor.Rcheck/echor-Ex.Rout | 193 ++ .../echor/old/echor.Rcheck/echor-Ex.pdf | Bin 0 -> 3611 bytes .../echor/old/echor.Rcheck/tests/spelling.R | 3 + .../old/echor.Rcheck/tests/spelling.Rout | 25 + .../echor/old/echor.Rcheck/tests/startup.Rs | 4 + .../echor/old/echor.Rcheck/tests/testthat.R | 3 + .../old/echor.Rcheck/tests/testthat.Rout | 26 + .../air_rest_services.get_download-f98011.csv | 2 + ...est_services.get_facility_info-96582d.json | 52 + ...est_services.get_facility_info-fdcbbc.json | 52 + .../air_rest_services.get_geojson-4d487a.json | 25 + .../air_rest_services.metadata-a4f118.json | 1071 ++++++++ ...ll_rpt_rest_services.get_caapr-75a2fe.json | 2074 ++++++++++++++ .../cwa_rest_services.get_download-279954.csv | 2 + .../cwa_rest_services.get_download-371b75.csv | 2 + ...est_services.get_facility_info-3c5df1.json | 72 + ...est_services.get_facility_info-3ebb0f.json | 52 + ...est_services.get_facility_info-5daf35.json | 54 + .../cwa_rest_services.get_geojson-1b9acd.json | 42 + .../cwa_rest_services.metadata-a4f118.json | 2423 +++++++++++++++++ ...ervices.download_effluent_chart-81e3b7.csv | 381 +++ .../rest_lookups.cwa_parameters-78a7fd.json | 11 + .../rest_lookups.cwa_parameters-e1774c.json | 27 + .../sdw_rest_services.get_download-cd93dc.csv | 40 + .../sdw_rest_services.get_systems-c651ad.json | 16 + .../sdw_rest_services.metadata-a4f118.json | 575 ++++ .../old/echor.Rcheck/tests/testthat/helper.R | 1 + .../tests/testthat/test-expected_errors.R | 25 + .../tests/testthat/test-expected_objects.R | 110 + revdep/checks.noindex/echor/old/libraries.txt | 105 + revdep/checks.noindex/libraries.csv | 2 + .../mapdeck/mapdeck_0.2.1.tar.gz | Bin 0 -> 2611501 bytes .../checks.noindex/mapdeck/new/libraries.txt | 72 + .../mapdeck/new/mapdeck.Rcheck/00check.log | 22 + .../mapdeck/new/mapdeck.Rcheck/00install.out | 34 + .../checks.noindex/mapdeck/old/libraries.txt | 72 + .../mapdeck/old/mapdeck.Rcheck/00check.log | 75 + .../mapdeck/old/mapdeck.Rcheck/00install.out | 220 ++ .../mapdeck/old/mapdeck.Rcheck/mapdeck-Ex.R | 282 ++ .../old/mapdeck.Rcheck/mapdeck-Ex.Rout | 304 +++ .../mapdeck/old/mapdeck.Rcheck/mapdeck-Ex.pdf | Bin 0 -> 3611 bytes .../old/mapdeck.Rcheck/tests/startup.Rs | 4 + .../old/mapdeck.Rcheck/tests/testthat.R | 4 + .../old/mapdeck.Rcheck/tests/testthat.Rout | 27 + .../testthat/test-htmlwidget_dependencies.R | 25 + .../tests/testthat/test-layer_arc.R | 56 + .../tests/testthat/test-layer_grid.R | 42 + .../tests/testthat/test-layer_hexagon.R | 41 + .../tests/testthat/test-layer_line.R | 56 + .../tests/testthat/test-layer_path.R | 37 + .../tests/testthat/test-layer_pointcloud.R | 63 + .../tests/testthat/test-layer_polygon.R | 40 + .../tests/testthat/test-layer_scatterplot.R | 40 + .../tests/testthat/test-layer_screengrid.R | 41 + .../tests/testthat/test-layer_text.R | 40 + .../tests/testthat/test-layers_cleared.R | 71 + .../tests/testthat/test-legends.R | 38 + .../testthat/test-map_layer_parameters.R | 24 + .../tests/testthat/test-map_layers.R | 104 + .../tests/testthat/test-map_styles.R | 15 + .../tests/testthat/test-map_utilities.R | 22 + .../tests/testthat/test-paths.R | 15 + .../tests/testthat/test-sf_functions.R | 52 + .../tests/testthat/test-transitions.R | 53 + .../opendatatoronto/new/libraries.txt | 93 + .../new/opendatatoronto.Rcheck/00check.log | 63 + .../new/opendatatoronto.Rcheck/00install.out | 14 + .../opendatatoronto-Ex.R | 139 + .../opendatatoronto-Ex.Rout | 161 ++ .../opendatatoronto-Ex.pdf | Bin 0 -> 3611 bytes .../opendatatoronto.Rcheck/tests/startup.Rs | 4 + .../opendatatoronto.Rcheck/tests/testthat.R | 4 + .../tests/testthat.Rout | 27 + .../tests/testthat/test-browse.R | 19 + .../tests/testthat/test-get_resource.R | 72 + .../testthat/test-list_package_resources.R | 23 + .../tests/testthat/test-list_packages.R | 17 + .../tests/testthat/test-search_packages.R | 46 + .../tests/testthat/test-show_package.R | 46 + .../tests/testthat/test-utils.R | 110 + .../opendatatoronto/old/libraries.txt | 93 + .../old/opendatatoronto.Rcheck/00check.log | 63 + .../old/opendatatoronto.Rcheck/00install.out | 14 + .../opendatatoronto-Ex.R | 139 + .../opendatatoronto-Ex.Rout | 161 ++ .../opendatatoronto-Ex.pdf | Bin 0 -> 3611 bytes .../opendatatoronto.Rcheck/tests/startup.Rs | 4 + .../opendatatoronto.Rcheck/tests/testthat.R | 4 + .../tests/testthat.Rout | 27 + .../tests/testthat/test-browse.R | 19 + .../tests/testthat/test-get_resource.R | 72 + .../testthat/test-list_package_resources.R | 23 + .../tests/testthat/test-list_packages.R | 17 + .../tests/testthat/test-search_packages.R | 46 + .../tests/testthat/test-show_package.R | 46 + .../tests/testthat/test-utils.R | 110 + .../opendatatoronto_0.1.1.tar.gz | Bin 0 -> 91413 bytes revdep/checks.noindex/otpr/new/libraries.txt | 55 + .../otpr/new/otpr.Rcheck/00check.log | 51 + .../otpr/new/otpr.Rcheck/00install.out | 14 + .../otpr/new/otpr.Rcheck/otpr-Ex.R | 111 + .../otpr/new/otpr.Rcheck/otpr-Ex.Rout | 133 + .../otpr/new/otpr.Rcheck/otpr-Ex.pdf | Bin 0 -> 3611 bytes .../otpr/new/otpr.Rcheck/tests/startup.Rs | 4 + .../otpr/new/otpr.Rcheck/tests/testthat.R | 4 + .../otpr/new/otpr.Rcheck/tests/testthat.Rout | 27 + .../tests/testthat/test-otp_connect.R | 41 + revdep/checks.noindex/otpr/old/libraries.txt | 55 + .../otpr/old/otpr.Rcheck/00check.log | 51 + .../otpr/old/otpr.Rcheck/00install.out | 14 + .../otpr/old/otpr.Rcheck/otpr-Ex.R | 111 + .../otpr/old/otpr.Rcheck/otpr-Ex.Rout | 133 + .../otpr/old/otpr.Rcheck/otpr-Ex.pdf | Bin 0 -> 3611 bytes .../otpr/old/otpr.Rcheck/tests/startup.Rs | 4 + .../otpr/old/otpr.Rcheck/tests/testthat.R | 4 + .../otpr/old/otpr.Rcheck/tests/testthat.Rout | 27 + .../tests/testthat/test-otp_connect.R | 41 + revdep/checks.noindex/otpr/otpr_0.3.0.tar.gz | Bin 0 -> 399339 bytes .../spatialwidget/new/libraries.txt | 62 + .../new/spatialwidget.Rcheck/00check.log | 22 + .../new/spatialwidget.Rcheck/00install.out | 35 + .../spatialwidget/old/libraries.txt | 62 + .../old/spatialwidget.Rcheck/00check.log | 68 + .../old/spatialwidget.Rcheck/00install.out | 116 + .../spatialwidget.Rcheck/spatialwidget-Ex.R | 93 + .../spatialwidget-Ex.Rout | 115 + .../spatialwidget.Rcheck/spatialwidget-Ex.pdf | Bin 0 -> 3611 bytes .../old/spatialwidget.Rcheck/tests/startup.Rs | 4 + .../old/spatialwidget.Rcheck/tests/testthat.R | 4 + .../spatialwidget.Rcheck/tests/testthat.Rout | 27 + .../tests/testthat/test-data_construction.R | 152 ++ .../tests/testthat/test-geojson.R | 126 + .../tests/testthat/test-layers.R | 59 + .../tests/testthat/test-legends.R | 103 + .../tests/testthat/test-palette.R | 33 + .../tests/testthat/test-utils.R | 42 + .../spatialwidget/spatialwidget_0.2.tar.gz | Bin 0 -> 545809 bytes .../checks.noindex/stats19/new/libraries.txt | 136 + .../stats19/new/stats19.Rcheck/00check.log | 67 + .../stats19/new/stats19.Rcheck/00install.out | 17 + .../stats19/new/stats19.Rcheck/stats19-Ex.R | 430 +++ .../new/stats19.Rcheck/stats19-Ex.Rout | 507 ++++ .../stats19/new/stats19.Rcheck/stats19-Ex.pdf | Bin 0 -> 233906 bytes .../new/stats19.Rcheck/tests/skip-download.R | 7 + .../stats19.Rcheck/tests/skip-download.Rout | 28 + .../new/stats19.Rcheck/tests/startup.Rs | 4 + .../new/stats19.Rcheck/tests/testthat.R | 4 + .../new/stats19.Rcheck/tests/testthat.Rout | 94 + .../tests/testthat/test-data_dir.R | 38 + .../tests/testthat/test-dl_stats19.R | 42 + .../tests/testthat/test-format.R | 84 + .../stats19.Rcheck/tests/testthat/test-get.R | 80 + .../stats19.Rcheck/tests/testthat/test-mot.R | 8 + .../tests/testthat/test-read_stats19.R | 125 + .../tests/testthat/test-utils.R | 54 + .../checks.noindex/stats19/old/libraries.txt | 136 + .../stats19/old/stats19.Rcheck/00check.log | 67 + .../stats19/old/stats19.Rcheck/00install.out | 17 + .../stats19/old/stats19.Rcheck/stats19-Ex.R | 430 +++ .../old/stats19.Rcheck/stats19-Ex.Rout | 507 ++++ .../stats19/old/stats19.Rcheck/stats19-Ex.pdf | Bin 0 -> 233906 bytes .../old/stats19.Rcheck/tests/skip-download.R | 7 + .../stats19.Rcheck/tests/skip-download.Rout | 28 + .../old/stats19.Rcheck/tests/startup.Rs | 4 + .../old/stats19.Rcheck/tests/testthat.R | 4 + .../old/stats19.Rcheck/tests/testthat.Rout | 94 + .../tests/testthat/test-data_dir.R | 38 + .../tests/testthat/test-dl_stats19.R | 42 + .../tests/testthat/test-format.R | 84 + .../stats19.Rcheck/tests/testthat/test-get.R | 80 + .../stats19.Rcheck/tests/testthat/test-mot.R | 8 + .../tests/testthat/test-read_stats19.R | 125 + .../tests/testthat/test-utils.R | 54 + .../stats19/stats19_1.2.0.tar.gz | Bin 0 -> 3070554 bytes .../checks.noindex/vapour/new/libraries.txt | 67 + .../vapour/new/vapour.Rcheck/00check.log | 21 + .../vapour/new/vapour.Rcheck/00install.out | 77 + .../checks.noindex/vapour/old/libraries.txt | 67 + .../vapour/old/vapour.Rcheck/00check.log | 21 + .../vapour/old/vapour.Rcheck/00install.out | 77 + .../checks.noindex/vapour/vapour_0.5.0.tar.gz | Bin 0 -> 1002743 bytes revdep/data.sqlite | Bin 0 -> 258048 bytes revdep/failures.md | 680 +++++ .../geojsonsf/new/geojsonsf/DESCRIPTION | 28 + .../geojsonsf/new/geojsonsf/INDEX | 7 + .../geojsonsf/new/geojsonsf/Meta/Rd.rds | Bin 0 -> 366 bytes .../geojsonsf/new/geojsonsf/Meta/data.rds | Bin 0 -> 90 bytes .../geojsonsf/new/geojsonsf/Meta/features.rds | Bin 0 -> 126 bytes .../geojsonsf/new/geojsonsf/Meta/hsearch.rds | Bin 0 -> 367 bytes .../geojsonsf/new/geojsonsf/Meta/links.rds | Bin 0 -> 185 bytes .../geojsonsf/new/geojsonsf/Meta/nsInfo.rds | Bin 0 -> 433 bytes .../geojsonsf/new/geojsonsf/Meta/package.rds | Bin 0 -> 1051 bytes .../geojsonsf/new/geojsonsf/NAMESPACE | 25 + .../geojsonsf/new/geojsonsf/NEWS.md | 61 + .../geojsonsf/new/geojsonsf/R/geojsonsf | 27 + .../geojsonsf/new/geojsonsf/R/geojsonsf.rdb | Bin 0 -> 15968 bytes .../geojsonsf/new/geojsonsf/R/geojsonsf.rdx | Bin 0 -> 771 bytes .../geojsonsf/new/geojsonsf/data/Rdata.rdb | Bin 0 -> 64221 bytes .../geojsonsf/new/geojsonsf/data/Rdata.rds | Bin 0 -> 87 bytes .../geojsonsf/new/geojsonsf/data/Rdata.rdx | Bin 0 -> 155 bytes .../geojsonsf/examples/geo_melbourne.geojson | 1 + .../geojsonsf/new/geojsonsf/help/AnIndex | 7 + .../geojsonsf/new/geojsonsf/help/aliases.rds | Bin 0 -> 127 bytes .../new/geojsonsf/help/figures/GeoJSONSF.png | Bin 0 -> 934904 bytes .../figures/README-unnamed-chunk-12-1.png | Bin 0 -> 94645 bytes .../help/figures/README-unnamed-chunk-5-1.png | Bin 0 -> 2915 bytes .../help/figures/README-unnamed-chunk-6-1.png | Bin 0 -> 13181 bytes .../help/figures/README-unnamed-chunk-7-1.png | Bin 0 -> 94645 bytes .../help/figures/README-unnamed-chunk-8-1.png | Bin 0 -> 94645 bytes .../help/figures/README-unnamed-chunk-9-1.png | Bin 0 -> 94645 bytes .../new/geojsonsf/help/geojsonsf.rdb | Bin 0 -> 15215 bytes .../new/geojsonsf/help/geojsonsf.rdx | Bin 0 -> 300 bytes .../geojsonsf/new/geojsonsf/help/paths.rds | Bin 0 -> 239 bytes .../geojsonsf/new/geojsonsf/html/00Index.html | 38 + .../geojsonsf/new/geojsonsf/html/R.css | 97 + .../include/geojsonsf/geojson/api/df_api.hpp | 197 ++ .../include/geojsonsf/geojson/api/sf_api.hpp | 182 ++ .../geojsonsf/geojson/geojson_properties.hpp | 291 ++ .../geojsonsf/geojson/geojson_to_sf.hpp | 226 ++ .../geojsonsf/geojson/geojson_validate.hpp | 154 ++ .../include/geojsonsf/geojson/parse.hpp | 305 +++ .../geojsonsf/geojson/write_geometry.hpp | 152 ++ .../geojson/writers/write_geojson.hpp | 124 + .../geojsonsf/geojson/writers/writers.hpp | 274 ++ .../geojsonsf/include/geojsonsf/geojsonsf.h | 27 + .../include/geojsonsf/geometries/sizes.hpp | 34 + .../geometrycollection/geometrycollection.hpp | 58 + .../include/geojsonsf/sf/sf/construct.hpp | 49 + .../include/geojsonsf/sf/sfc/geojson_sfc.hpp | 43 + .../geojsonsf/sf/sfc/utils/sfc_utils.hpp | 100 + .../include/geojsonsf/sf/sfg/geojson_sfg.hpp | 356 +++ .../include/geojsonsf/wkt/geojson_wkt.hpp | 27 + .../include/geojsonsf/write_geojson.hpp | 8 + .../geojsonsf/old/geojsonsf/DESCRIPTION | 26 + .../geojsonsf/old/geojsonsf/INDEX | 7 + .../geojsonsf/old/geojsonsf/Meta/Rd.rds | Bin 0 -> 365 bytes .../geojsonsf/old/geojsonsf/Meta/data.rds | Bin 0 -> 89 bytes .../geojsonsf/old/geojsonsf/Meta/features.rds | Bin 0 -> 125 bytes .../geojsonsf/old/geojsonsf/Meta/hsearch.rds | Bin 0 -> 367 bytes .../geojsonsf/old/geojsonsf/Meta/links.rds | Bin 0 -> 183 bytes .../geojsonsf/old/geojsonsf/Meta/nsInfo.rds | Bin 0 -> 425 bytes .../geojsonsf/old/geojsonsf/Meta/package.rds | Bin 0 -> 1007 bytes .../geojsonsf/old/geojsonsf/Meta/vignette.rds | Bin 0 -> 237 bytes .../geojsonsf/old/geojsonsf/NAMESPACE | 25 + .../geojsonsf/old/geojsonsf/NEWS.md | 47 + .../geojsonsf/old/geojsonsf/R/geojsonsf | 27 + .../geojsonsf/old/geojsonsf/R/geojsonsf.rdb | Bin 0 -> 13274 bytes .../geojsonsf/old/geojsonsf/R/geojsonsf.rdx | Bin 0 -> 717 bytes .../geojsonsf/old/geojsonsf/data/Rdata.rdb | Bin 0 -> 64219 bytes .../geojsonsf/old/geojsonsf/data/Rdata.rds | Bin 0 -> 86 bytes .../geojsonsf/old/geojsonsf/data/Rdata.rdx | Bin 0 -> 153 bytes .../geojsonsf/doc/geojson-sf-conversions.R | 173 ++ .../geojsonsf/doc/geojson-sf-conversions.Rmd | 255 ++ .../geojsonsf/doc/geojson-sf-conversions.html | 583 ++++ .../geojsonsf/old/geojsonsf/doc/index.html | 28 + .../geojsonsf/examples/geo_melbourne.geojson | 1 + .../geojsonsf/old/geojsonsf/help/AnIndex | 7 + .../geojsonsf/old/geojsonsf/help/aliases.rds | Bin 0 -> 126 bytes .../old/geojsonsf/help/figures/GeoJSONSF.png | Bin 0 -> 934904 bytes .../figures/README-unnamed-chunk-12-1.png | Bin 0 -> 94645 bytes .../help/figures/README-unnamed-chunk-5-1.png | Bin 0 -> 2915 bytes .../help/figures/README-unnamed-chunk-6-1.png | Bin 0 -> 13181 bytes .../help/figures/README-unnamed-chunk-7-1.png | Bin 0 -> 94645 bytes .../help/figures/README-unnamed-chunk-8-1.png | Bin 0 -> 94645 bytes .../help/figures/README-unnamed-chunk-9-1.png | Bin 0 -> 94645 bytes .../old/geojsonsf/help/geojsonsf.rdb | Bin 0 -> 13150 bytes .../old/geojsonsf/help/geojsonsf.rdx | Bin 0 -> 303 bytes .../geojsonsf/old/geojsonsf/help/paths.rds | Bin 0 -> 236 bytes .../geojsonsf/old/geojsonsf/html/00Index.html | 39 + .../geojsonsf/old/geojsonsf/html/R.css | 97 + .../include/geojsonsf/geojson/api/df_api.hpp | 193 ++ .../include/geojsonsf/geojson/api/sf_api.hpp | 172 ++ .../geojsonsf/geojson/geojson_properties.hpp | 251 ++ .../geojsonsf/geojson/geojson_to_sf.hpp | 123 + .../geojsonsf/geojson/geojson_validate.hpp | 105 + .../include/geojsonsf/geojson/parse.hpp | 275 ++ .../geojsonsf/geojson/write_geometry.hpp | 132 + .../geojson/writers/write_geojson.hpp | 109 + .../geojsonsf/geojson/writers/writers.hpp | 263 ++ .../geojsonsf/include/geojsonsf/geojsonsf.h | 45 + .../include/geojsonsf/geometries/sizes.hpp | 34 + .../geometrycollection/geometrycollection.hpp | 61 + .../include/geojsonsf/sf/sf/construct.hpp | 47 + .../include/geojsonsf/sf/sfc/geojson_sfc.hpp | 31 + .../geojsonsf/sf/sfc/utils/sfc_utils.hpp | 172 ++ .../include/geojsonsf/sf/sfg/geojson_sfg.hpp | 298 ++ .../include/geojsonsf/utils/utils.hpp | 64 + .../include/geojsonsf/utils/where/where.hpp | 45 + .../include/geojsonsf/wkt/geojson_wkt.hpp | 27 + .../include/geojsonsf/write_geojson.hpp | 13 + .../include/geojsonsf/writers/writers.hpp | 9 + .../geojsonsf.so.dSYM/Contents/Info.plist | 20 + revdep/problems.md | 491 ++++ src/df_geojson.cpp | 8 +- src/geojson_wkt.cpp | 6 +- 377 files changed, 36344 insertions(+), 50 deletions(-) create mode 100644 revdep/README.md create mode 100644 revdep/checks.noindex/TargomoR/TargomoR_0.2.0.tar.gz create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/00check.log create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/00install.out create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/TargomoR-Ex.R create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/TargomoR-Ex.Rout create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/TargomoR-Ex.pdf create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/tests/testthat/print-capabilities.txt create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/tests/testthat/test-api.R create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/tests/testthat/test-basemaps.R create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/tests/testthat/test-other.R create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/tests/testthat/test-polygons.R create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/tests/testthat/test-routes.R create mode 100644 revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/tests/testthat/test-times.R create mode 100644 revdep/checks.noindex/TargomoR/new/libraries.txt create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/00check.log create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/00install.out create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/TargomoR-Ex.R create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/TargomoR-Ex.Rout create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/TargomoR-Ex.pdf create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/tests/testthat/print-capabilities.txt create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/tests/testthat/test-api.R create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/tests/testthat/test-basemaps.R create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/tests/testthat/test-other.R create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/tests/testthat/test-polygons.R create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/tests/testthat/test-routes.R create mode 100644 revdep/checks.noindex/TargomoR/old/TargomoR.Rcheck/tests/testthat/test-times.R create mode 100644 revdep/checks.noindex/TargomoR/old/libraries.txt create mode 100644 revdep/checks.noindex/echor/echor_0.1.4.tar.gz create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/00check.log create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/00install.out create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/echor-Ex.R create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/echor-Ex.Rout create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/echor-Ex.pdf create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/spelling.R create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/spelling.Rout create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/air_rest_services.get_download-f98011.csv create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/air_rest_services.get_facility_info-96582d.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/air_rest_services.get_facility_info-fdcbbc.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/air_rest_services.get_geojson-4d487a.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/air_rest_services.metadata-a4f118.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/caa_poll_rpt_rest_services.get_caapr-75a2fe.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_download-279954.csv create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_download-371b75.csv create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_facility_info-3c5df1.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_facility_info-3ebb0f.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_facility_info-5daf35.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_geojson-1b9acd.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/cwa_rest_services.metadata-a4f118.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/eff_rest_services.download_effluent_chart-81e3b7.csv create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/rest_lookups.cwa_parameters-78a7fd.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/rest_lookups.cwa_parameters-e1774c.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/sdw_rest_services.get_download-cd93dc.csv create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/sdw_rest_services.get_systems-c651ad.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/api/sdw_rest_services.metadata-a4f118.json create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/helper.R create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/test-expected_errors.R create mode 100644 revdep/checks.noindex/echor/new/echor.Rcheck/tests/testthat/test-expected_objects.R create mode 100644 revdep/checks.noindex/echor/new/libraries.txt create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/00check.log create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/00install.out create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/echor-Ex.R create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/echor-Ex.Rout create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/echor-Ex.pdf create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/spelling.R create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/spelling.Rout create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/air_rest_services.get_download-f98011.csv create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/air_rest_services.get_facility_info-96582d.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/air_rest_services.get_facility_info-fdcbbc.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/air_rest_services.get_geojson-4d487a.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/air_rest_services.metadata-a4f118.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/caa_poll_rpt_rest_services.get_caapr-75a2fe.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_download-279954.csv create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_download-371b75.csv create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_facility_info-3c5df1.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_facility_info-3ebb0f.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_facility_info-5daf35.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/cwa_rest_services.get_geojson-1b9acd.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/cwa_rest_services.metadata-a4f118.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/eff_rest_services.download_effluent_chart-81e3b7.csv create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/rest_lookups.cwa_parameters-78a7fd.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/rest_lookups.cwa_parameters-e1774c.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/sdw_rest_services.get_download-cd93dc.csv create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/sdw_rest_services.get_systems-c651ad.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/api/sdw_rest_services.metadata-a4f118.json create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/helper.R create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/test-expected_errors.R create mode 100644 revdep/checks.noindex/echor/old/echor.Rcheck/tests/testthat/test-expected_objects.R create mode 100644 revdep/checks.noindex/echor/old/libraries.txt create mode 100644 revdep/checks.noindex/libraries.csv create mode 100644 revdep/checks.noindex/mapdeck/mapdeck_0.2.1.tar.gz create mode 100644 revdep/checks.noindex/mapdeck/new/libraries.txt create mode 100644 revdep/checks.noindex/mapdeck/new/mapdeck.Rcheck/00check.log create mode 100644 revdep/checks.noindex/mapdeck/new/mapdeck.Rcheck/00install.out create mode 100644 revdep/checks.noindex/mapdeck/old/libraries.txt create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/00check.log create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/00install.out create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/mapdeck-Ex.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/mapdeck-Ex.Rout create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/mapdeck-Ex.pdf create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-htmlwidget_dependencies.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layer_arc.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layer_grid.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layer_hexagon.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layer_line.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layer_path.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layer_pointcloud.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layer_polygon.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layer_scatterplot.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layer_screengrid.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layer_text.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-layers_cleared.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-legends.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-map_layer_parameters.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-map_layers.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-map_styles.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-map_utilities.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-paths.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-sf_functions.R create mode 100644 revdep/checks.noindex/mapdeck/old/mapdeck.Rcheck/tests/testthat/test-transitions.R create mode 100644 revdep/checks.noindex/opendatatoronto/new/libraries.txt create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/00check.log create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/00install.out create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/opendatatoronto-Ex.R create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/opendatatoronto-Ex.Rout create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/opendatatoronto-Ex.pdf create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/tests/testthat/test-browse.R create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/tests/testthat/test-get_resource.R create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/tests/testthat/test-list_package_resources.R create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/tests/testthat/test-list_packages.R create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/tests/testthat/test-search_packages.R create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/tests/testthat/test-show_package.R create mode 100644 revdep/checks.noindex/opendatatoronto/new/opendatatoronto.Rcheck/tests/testthat/test-utils.R create mode 100644 revdep/checks.noindex/opendatatoronto/old/libraries.txt create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/00check.log create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/00install.out create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/opendatatoronto-Ex.R create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/opendatatoronto-Ex.Rout create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/opendatatoronto-Ex.pdf create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/tests/testthat/test-browse.R create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/tests/testthat/test-get_resource.R create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/tests/testthat/test-list_package_resources.R create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/tests/testthat/test-list_packages.R create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/tests/testthat/test-search_packages.R create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/tests/testthat/test-show_package.R create mode 100644 revdep/checks.noindex/opendatatoronto/old/opendatatoronto.Rcheck/tests/testthat/test-utils.R create mode 100644 revdep/checks.noindex/opendatatoronto/opendatatoronto_0.1.1.tar.gz create mode 100644 revdep/checks.noindex/otpr/new/libraries.txt create mode 100644 revdep/checks.noindex/otpr/new/otpr.Rcheck/00check.log create mode 100644 revdep/checks.noindex/otpr/new/otpr.Rcheck/00install.out create mode 100644 revdep/checks.noindex/otpr/new/otpr.Rcheck/otpr-Ex.R create mode 100644 revdep/checks.noindex/otpr/new/otpr.Rcheck/otpr-Ex.Rout create mode 100644 revdep/checks.noindex/otpr/new/otpr.Rcheck/otpr-Ex.pdf create mode 100644 revdep/checks.noindex/otpr/new/otpr.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/otpr/new/otpr.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/otpr/new/otpr.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/otpr/new/otpr.Rcheck/tests/testthat/test-otp_connect.R create mode 100644 revdep/checks.noindex/otpr/old/libraries.txt create mode 100644 revdep/checks.noindex/otpr/old/otpr.Rcheck/00check.log create mode 100644 revdep/checks.noindex/otpr/old/otpr.Rcheck/00install.out create mode 100644 revdep/checks.noindex/otpr/old/otpr.Rcheck/otpr-Ex.R create mode 100644 revdep/checks.noindex/otpr/old/otpr.Rcheck/otpr-Ex.Rout create mode 100644 revdep/checks.noindex/otpr/old/otpr.Rcheck/otpr-Ex.pdf create mode 100644 revdep/checks.noindex/otpr/old/otpr.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/otpr/old/otpr.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/otpr/old/otpr.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/otpr/old/otpr.Rcheck/tests/testthat/test-otp_connect.R create mode 100644 revdep/checks.noindex/otpr/otpr_0.3.0.tar.gz create mode 100644 revdep/checks.noindex/spatialwidget/new/libraries.txt create mode 100644 revdep/checks.noindex/spatialwidget/new/spatialwidget.Rcheck/00check.log create mode 100644 revdep/checks.noindex/spatialwidget/new/spatialwidget.Rcheck/00install.out create mode 100644 revdep/checks.noindex/spatialwidget/old/libraries.txt create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/00check.log create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/00install.out create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/spatialwidget-Ex.R create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/spatialwidget-Ex.Rout create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/spatialwidget-Ex.pdf create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/tests/testthat/test-data_construction.R create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/tests/testthat/test-geojson.R create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/tests/testthat/test-layers.R create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/tests/testthat/test-legends.R create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/tests/testthat/test-palette.R create mode 100644 revdep/checks.noindex/spatialwidget/old/spatialwidget.Rcheck/tests/testthat/test-utils.R create mode 100644 revdep/checks.noindex/spatialwidget/spatialwidget_0.2.tar.gz create mode 100644 revdep/checks.noindex/stats19/new/libraries.txt create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/00check.log create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/00install.out create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/stats19-Ex.R create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/stats19-Ex.Rout create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/stats19-Ex.pdf create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/skip-download.R create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/skip-download.Rout create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/testthat/test-data_dir.R create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/testthat/test-dl_stats19.R create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/testthat/test-format.R create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/testthat/test-get.R create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/testthat/test-mot.R create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/testthat/test-read_stats19.R create mode 100644 revdep/checks.noindex/stats19/new/stats19.Rcheck/tests/testthat/test-utils.R create mode 100644 revdep/checks.noindex/stats19/old/libraries.txt create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/00check.log create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/00install.out create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/stats19-Ex.R create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/stats19-Ex.Rout create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/stats19-Ex.pdf create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/skip-download.R create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/skip-download.Rout create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/startup.Rs create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/testthat.R create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/testthat.Rout create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/testthat/test-data_dir.R create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/testthat/test-dl_stats19.R create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/testthat/test-format.R create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/testthat/test-get.R create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/testthat/test-mot.R create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/testthat/test-read_stats19.R create mode 100644 revdep/checks.noindex/stats19/old/stats19.Rcheck/tests/testthat/test-utils.R create mode 100644 revdep/checks.noindex/stats19/stats19_1.2.0.tar.gz create mode 100644 revdep/checks.noindex/vapour/new/libraries.txt create mode 100644 revdep/checks.noindex/vapour/new/vapour.Rcheck/00check.log create mode 100644 revdep/checks.noindex/vapour/new/vapour.Rcheck/00install.out create mode 100644 revdep/checks.noindex/vapour/old/libraries.txt create mode 100644 revdep/checks.noindex/vapour/old/vapour.Rcheck/00check.log create mode 100644 revdep/checks.noindex/vapour/old/vapour.Rcheck/00install.out create mode 100644 revdep/checks.noindex/vapour/vapour_0.5.0.tar.gz create mode 100644 revdep/data.sqlite create mode 100644 revdep/failures.md create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/DESCRIPTION create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/INDEX create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/Meta/Rd.rds create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/Meta/data.rds create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/Meta/features.rds create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/Meta/hsearch.rds create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/Meta/links.rds create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/Meta/nsInfo.rds create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/Meta/package.rds create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/NAMESPACE create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/NEWS.md create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/R/geojsonsf create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/R/geojsonsf.rdb create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/R/geojsonsf.rdx create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/data/Rdata.rdb create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/data/Rdata.rds create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/data/Rdata.rdx create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/examples/geo_melbourne.geojson create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/AnIndex create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/aliases.rds create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/figures/GeoJSONSF.png create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/figures/README-unnamed-chunk-12-1.png create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/figures/README-unnamed-chunk-5-1.png create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/figures/README-unnamed-chunk-6-1.png create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/figures/README-unnamed-chunk-7-1.png create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/figures/README-unnamed-chunk-8-1.png create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/figures/README-unnamed-chunk-9-1.png create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/geojsonsf.rdb create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/geojsonsf.rdx create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/help/paths.rds create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/html/00Index.html create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/html/R.css create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geojson/api/df_api.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geojson/api/sf_api.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geojson/geojson_properties.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geojson/geojson_to_sf.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geojson/geojson_validate.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geojson/parse.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geojson/write_geometry.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geojson/writers/write_geojson.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geojson/writers/writers.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geojsonsf.h create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geometries/sizes.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/geometrycollection/geometrycollection.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/sf/sf/construct.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/sf/sfc/geojson_sfc.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/sf/sfc/utils/sfc_utils.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/sf/sfg/geojson_sfg.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/wkt/geojson_wkt.hpp create mode 100644 revdep/library.noindex/geojsonsf/new/geojsonsf/include/geojsonsf/write_geojson.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/DESCRIPTION create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/INDEX create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/Meta/Rd.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/Meta/data.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/Meta/features.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/Meta/hsearch.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/Meta/links.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/Meta/nsInfo.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/Meta/package.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/Meta/vignette.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/NAMESPACE create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/NEWS.md create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/R/geojsonsf create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/R/geojsonsf.rdb create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/R/geojsonsf.rdx create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/data/Rdata.rdb create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/data/Rdata.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/data/Rdata.rdx create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/doc/geojson-sf-conversions.R create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/doc/geojson-sf-conversions.Rmd create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/doc/geojson-sf-conversions.html create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/doc/index.html create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/examples/geo_melbourne.geojson create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/AnIndex create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/aliases.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/figures/GeoJSONSF.png create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/figures/README-unnamed-chunk-12-1.png create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/figures/README-unnamed-chunk-5-1.png create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/figures/README-unnamed-chunk-6-1.png create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/figures/README-unnamed-chunk-7-1.png create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/figures/README-unnamed-chunk-8-1.png create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/figures/README-unnamed-chunk-9-1.png create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/geojsonsf.rdb create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/geojsonsf.rdx create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/help/paths.rds create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/html/00Index.html create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/html/R.css create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geojson/api/df_api.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geojson/api/sf_api.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geojson/geojson_properties.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geojson/geojson_to_sf.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geojson/geojson_validate.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geojson/parse.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geojson/write_geometry.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geojson/writers/write_geojson.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geojson/writers/writers.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geojsonsf.h create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geometries/sizes.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/geometrycollection/geometrycollection.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/sf/sf/construct.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/sf/sfc/geojson_sfc.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/sf/sfc/utils/sfc_utils.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/sf/sfg/geojson_sfg.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/utils/utils.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/utils/where/where.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/wkt/geojson_wkt.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/write_geojson.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/include/geojsonsf/writers/writers.hpp create mode 100644 revdep/library.noindex/geojsonsf/old/geojsonsf/libs/geojsonsf.so.dSYM/Contents/Info.plist create mode 100644 revdep/problems.md diff --git a/inst/include/geojsonsf/geojson/api/df_api.hpp b/inst/include/geojsonsf/geojson/api/df_api.hpp index 7801da8..0d927da 100644 --- a/inst/include/geojsonsf/geojson/api/df_api.hpp +++ b/inst/include/geojsonsf/geojson/api/df_api.hpp @@ -18,7 +18,7 @@ namespace api { Rcpp::StringVector& geometry_columns, int& digits, bool& factors_as_string - ) { + ) { rapidjson::StringBuffer sb; rapidjson::Writer < rapidjson::StringBuffer > writer( sb ); @@ -104,7 +104,8 @@ namespace api { Rcpp::DataFrame& df, Rcpp::StringVector& geometry_columns, int& digits, - bool& factors_as_string ) { + bool& factors_as_string + ) { R_xlen_t n_cols = df.ncol(); R_xlen_t n_rows = df.nrows(); diff --git a/inst/include/geojsonsf/geojson/api/sf_api.hpp b/inst/include/geojsonsf/geojson/api/sf_api.hpp index 7ac7436..dc604d0 100644 --- a/inst/include/geojsonsf/geojson/api/sf_api.hpp +++ b/inst/include/geojsonsf/geojson/api/sf_api.hpp @@ -10,7 +10,10 @@ namespace geojsonsf { namespace api { - inline Rcpp::StringVector sfc_to_geojson( Rcpp::List& sfc, int& digits ) { + inline Rcpp::StringVector sfc_to_geojson( + Rcpp::List& sfc, + int& digits + ) { // atomise - each row is a separate GeoJSON string R_xlen_t n_rows = sfc.size(); @@ -35,7 +38,11 @@ namespace api { * * Converts sf object to GeoJSON */ - inline Rcpp::StringVector sf_to_geojson( Rcpp::DataFrame& sf, int& digits, bool& factors_as_string ) { + inline Rcpp::StringVector sf_to_geojson( + Rcpp::DataFrame& sf, + int& digits, + bool& factors_as_string + ) { rapidjson::StringBuffer sb; rapidjson::Writer < rapidjson::StringBuffer > writer( sb ); @@ -100,15 +107,19 @@ namespace api { * Takes an sf object, converts to atomised GeoJSON * Where every geometry is turned into an individual array */ - inline Rcpp::StringVector sf_to_geojson_atomise( Rcpp::DataFrame& sf, int& digits, bool& factors_as_string ) { + inline Rcpp::StringVector sf_to_geojson_atomise( + Rcpp::DataFrame& sf, + int& digits, + bool& factors_as_string + ) { // atomise - each row is a separate GeoJSON string - std::string geom_column = sf.attr("sf_column"); + std::string geom_column = sf.attr("sf_column"); - R_xlen_t n_cols = sf.ncol(); - R_xlen_t n_properties = n_cols - 1; - R_xlen_t n_rows = sf.nrows(); - R_xlen_t i, j; + R_xlen_t n_cols = sf.ncol(); + R_xlen_t n_properties = n_cols - 1; + R_xlen_t n_rows = sf.nrows(); +R_xlen_t i, j; Rcpp::StringVector column_names = sf.names(); Rcpp::StringVector property_names(sf.size() - 1); diff --git a/inst/include/geojsonsf/geojson/geojson_properties.hpp b/inst/include/geojsonsf/geojson/geojson_properties.hpp index 6103f5a..9c225a5 100644 --- a/inst/include/geojsonsf/geojson/geojson_properties.hpp +++ b/inst/include/geojsonsf/geojson/geojson_properties.hpp @@ -19,7 +19,10 @@ namespace geojson_properties { /* * Updates a list element to string */ - inline void vector_to_string(Rcpp::List& lst, std::string& key) { + inline void vector_to_string( + Rcpp::List& lst, + std::string& key + ) { Rcpp::StringVector sv = Rcpp::as(lst[key]); lst[key] = sv; } @@ -80,7 +83,10 @@ namespace geojson_properties { } - inline void get_property_keys(const Value& v, std::unordered_set< std::string >& property_keys) { + inline void get_property_keys( + const Value& v, + std::unordered_set< std::string >& property_keys + ) { for ( Value::ConstMemberIterator iter = v.MemberBegin(); iter != v.MemberEnd(); ++iter ) { @@ -127,17 +133,23 @@ namespace geojson_properties { sf[key] = nv; } - inline Rcpp::NumericVector na_numeric_vector(const R_xlen_t& n_elements) { + inline Rcpp::NumericVector na_numeric_vector( + const R_xlen_t& n_elements + ) { Rcpp::NumericVector nv(n_elements, NA_REAL); return nv; } - inline Rcpp::StringVector na_string_vector(const R_xlen_t& n_elements) { + inline Rcpp::StringVector na_string_vector( + const R_xlen_t& n_elements + ) { Rcpp::StringVector sv(n_elements, Rcpp::StringVector::get_na()); return sv; } - inline Rcpp::LogicalVector na_logical_vector(const R_xlen_t& n_elements) { + inline Rcpp::LogicalVector na_logical_vector( + const R_xlen_t& n_elements + ) { Rcpp::LogicalVector lv(n_elements, NA_LOGICAL); return lv; } diff --git a/inst/include/geojsonsf/geojson/geojson_to_sf.hpp b/inst/include/geojsonsf/geojson/geojson_to_sf.hpp index dc905bb..61eb31a 100644 --- a/inst/include/geojsonsf/geojson/geojson_to_sf.hpp +++ b/inst/include/geojsonsf/geojson/geojson_to_sf.hpp @@ -41,7 +41,7 @@ namespace sf { Rcpp::List sf(1); Rcpp::List sfc(1); Rcpp::List properties(1); - unsigned int doc_ele; + R_xlen_t doc_ele; if (d.IsObject()) { Rcpp::List sfg(1); @@ -185,7 +185,10 @@ namespace sf { //return Rcpp::List::create(); } - inline Rcpp::List generic_geojson_to_sf(Rcpp::StringVector geojson, bool& expand_geometries) { + inline Rcpp::List generic_geojson_to_sf( + Rcpp::StringVector geojson, + bool& expand_geometries + ) { // iterate over the geojson int n = geojson.size(); R_xlen_t sfg_objects = 0; // keep track of number of objects diff --git a/inst/include/geojsonsf/geojson/geojson_validate.hpp b/inst/include/geojsonsf/geojson/geojson_validate.hpp index aa56cb4..6db07fe 100644 --- a/inst/include/geojsonsf/geojson/geojson_validate.hpp +++ b/inst/include/geojsonsf/geojson/geojson_validate.hpp @@ -10,44 +10,63 @@ using namespace rapidjson; namespace geojsonsf { namespace validate { - inline void geojson_object_error(std::string key) { + inline void geojson_object_error( + std::string key + ) { std::string err = "Invalid " + key + " object"; Rcpp::stop(err); } - inline void geojson_object_error(std::string key, int sfg_number) { + inline void geojson_object_error( + std::string key, + int sfg_number + ) { std::string err = "No '" + key + "' member at object index " + std::to_string(sfg_number) + " - invalid GeoJSON"; Rcpp::stop(err); } - inline void safe_parse_stream(Document& d, FileReadStream is ) { + inline void safe_parse_stream( + Document& d, + FileReadStream is + ) { d.ParseStream( is ); if( d.ParseStream( is ).HasParseError() ) { Rcpp::stop("invalid JSON"); } } - inline void safe_parse(Document& d, const char* geojson) { + inline void safe_parse( + Document& d, + const char* geojson + ) { d.Parse(geojson); if( d.Parse(geojson).HasParseError() ) { Rcpp::stop("Invalid JSON"); } } - inline void validate_array(const Value& v) { + inline void validate_array( + const Value& v + ) { if ( v.IsArray() == false) { geojson_object_error("array"); } } - inline void validate_array(const Value& v, R_xlen_t& sfg_objects) { + inline void validate_array( + const Value& v, + R_xlen_t& sfg_objects + ) { if ( v.IsArray() == false) { geojson_object_error("array", sfg_objects); } } - inline void validate_type(const Value& v, R_xlen_t& sfg_objects) { + inline void validate_type( + const Value& v, + R_xlen_t& sfg_objects + ) { if (v.HasMember("type") == false ) { geojson_object_error("type", sfg_objects); } @@ -56,49 +75,71 @@ namespace validate { } } - inline void validate_features(const Value& v, R_xlen_t& sfg_objects) { + inline void validate_features( + const Value& v, + R_xlen_t& sfg_objects + ) { if (v.HasMember("features") == false) { geojson_object_error("features", sfg_objects); } } - inline void validate_feature(const Value& v, R_xlen_t& sfg_objects) { + inline void validate_feature( + const Value& v, + R_xlen_t& sfg_objects + ) { if (v.HasMember("feature") == false) { geojson_object_error("feature", sfg_objects); } } - inline void validate_properties(const Value& v, R_xlen_t& sfg_objects) { + inline void validate_properties( + const Value& v, + R_xlen_t& sfg_objects + ) { if (v.HasMember("properties") == false) { geojson_object_error("properties", sfg_objects); } } - inline void validate_geometry(const Value& v, R_xlen_t& sfg_objects) { + inline void validate_geometry( + const Value& v, + R_xlen_t& sfg_objects + ) { if (v.HasMember("geometry") == false) { geojson_object_error("geometry", sfg_objects); } } - inline void validate_geometries(const Value& v, R_xlen_t& sfg_objects) { + inline void validate_geometries( + const Value& v, + R_xlen_t& sfg_objects + ) { if (v.HasMember("geometries") == false) { geojson_object_error("geometries", sfg_objects); } } - inline void validate_coordinates(const Value& v, R_xlen_t& sfg_objects) { + inline void validate_coordinates( + const Value& v, + R_xlen_t& sfg_objects + ) { if (v.HasMember("coordinates") == false) { geojson_object_error("coordinates", sfg_objects); } } - inline void validate_points(const Value& v) { + inline void validate_points( + const Value& v + ) { if ( v.Size() < 2 || v.Size() > 4 ) { geojson_object_error("lon/lat"); } } - inline void validate_point(const Value& v) { + inline void validate_point( + const Value& v + ) { // TODO(move to header): static const char* ARRAY_TYPES[] = { "Null", "false", "True", "Object", "Array", "String", "Number" }; diff --git a/inst/include/geojsonsf/geojson/parse.hpp b/inst/include/geojsonsf/geojson/parse.hpp index 8862c4a..ac655fa 100644 --- a/inst/include/geojsonsf/geojson/parse.hpp +++ b/inst/include/geojsonsf/geojson/parse.hpp @@ -204,7 +204,7 @@ namespace parse { const Value& v, Rcpp::List& sfc, Rcpp::List& properties, - int i, + R_xlen_t i, Rcpp::NumericVector& bbox, Rcpp::NumericVector& z_range, Rcpp::NumericVector& m_range, @@ -279,7 +279,7 @@ namespace parse { Document& d, Rcpp::List& sfc, Rcpp::List& properties, - int i, + R_xlen_t i, Rcpp::NumericVector& bbox, Rcpp::NumericVector& z_range, Rcpp::NumericVector& m_range, diff --git a/inst/include/geojsonsf/geojson/write_geometry.hpp b/inst/include/geojsonsf/geojson/write_geometry.hpp index dd3b7ec..df0fc2f 100644 --- a/inst/include/geojsonsf/geojson/write_geometry.hpp +++ b/inst/include/geojsonsf/geojson/write_geometry.hpp @@ -25,7 +25,12 @@ namespace write_geometry { * no requriement to keep track of sfg indeces */ template< typename Writer > - inline void write_geometry(Writer& writer, SEXP sfg, Rcpp::CharacterVector& cls, int digits ) { + inline void write_geometry( + Writer& writer, + SEXP sfg, + Rcpp::CharacterVector& cls, + int digits + ) { std::string geom_type; geom_type = cls[1]; @@ -54,7 +59,12 @@ namespace write_geometry { * the standard function for writing GeoJSON geometries */ template< typename Writer > - inline void write_geometry(Writer& writer, Rcpp::List& sfc, int sfg_index, int digits) { + inline void write_geometry( + Writer& writer, + Rcpp::List& sfc, + R_xlen_t sfg_index, + int digits + ) { SEXP sfg = sfc[ sfg_index ]; @@ -90,8 +100,15 @@ namespace write_geometry { * down-casting MULTI* geometries to their simpler form */ template< typename Writer > - inline void write_geometry(Writer& writer, Rcpp::List& sfc, int sfg_index, int geometry_index, - std::string& geom_type, Rcpp::CharacterVector& cls, int digits ) { + inline void write_geometry( + Writer& writer, + Rcpp::List& sfc, + R_xlen_t sfg_index, + R_xlen_t geometry_index, + std::string& geom_type, + Rcpp::CharacterVector& cls, + int digits + ) { SEXP sfg = sfc[ sfg_index ]; std::string downcast_geometry; diff --git a/inst/include/geojsonsf/geojson/writers/write_geojson.hpp b/inst/include/geojsonsf/geojson/writers/write_geojson.hpp index ae335e5..e6948af 100644 --- a/inst/include/geojsonsf/geojson/writers/write_geojson.hpp +++ b/inst/include/geojsonsf/geojson/writers/write_geojson.hpp @@ -67,7 +67,8 @@ namespace write_geojson { SEXP sfg, std::string& geom_type, Rcpp::CharacterVector& cls, - int geometry_index, int& digits + R_xlen_t geometry_index, + int& digits ) { if (geom_type == "POINT") { diff --git a/inst/include/geojsonsf/geojson/writers/writers.hpp b/inst/include/geojsonsf/geojson/writers/writers.hpp index 3bd00ce..0b4c9dc 100644 --- a/inst/include/geojsonsf/geojson/writers/writers.hpp +++ b/inst/include/geojsonsf/geojson/writers/writers.hpp @@ -97,7 +97,7 @@ namespace writers { } template< typename Writer > - inline void polygon_separator( Writer& writer, int i, int n ) { + inline void polygon_separator( Writer& writer, R_xlen_t i, R_xlen_t n ) { if (i < ( n - 1 ) ) { writer.EndArray(); writer.EndArray(); @@ -107,7 +107,7 @@ namespace writers { } template< typename Writer > - inline void line_separator( Writer& writer, int i, int n) { + inline void line_separator( Writer& writer, R_xlen_t i, R_xlen_t n) { if ( i < ( n - 1 ) ) { writer.EndArray(); writer.StartArray(); diff --git a/inst/include/geojsonsf/geometrycollection/geometrycollection.hpp b/inst/include/geojsonsf/geometrycollection/geometrycollection.hpp index 59ec844..dbbc21d 100644 --- a/inst/include/geojsonsf/geometrycollection/geometrycollection.hpp +++ b/inst/include/geojsonsf/geometrycollection/geometrycollection.hpp @@ -8,7 +8,12 @@ namespace geojsonsf { namespace geometrycollection { - inline void gc_type( Rcpp::List& sfg, std::string& gc_geom_type, bool& isnull, Rcpp::CharacterVector& cls ) { + inline void gc_type( + Rcpp::List& sfg, + std::string& gc_geom_type, + bool& isnull, + Rcpp::CharacterVector& cls + ) { for (Rcpp::List::iterator it = sfg.begin(); it != sfg.end(); it++) { diff --git a/inst/include/geojsonsf/wkt/geojson_wkt.hpp b/inst/include/geojsonsf/wkt/geojson_wkt.hpp index 18e39aa..2439b96 100644 --- a/inst/include/geojsonsf/wkt/geojson_wkt.hpp +++ b/inst/include/geojsonsf/wkt/geojson_wkt.hpp @@ -5,7 +5,7 @@ #include "rapidjson/document.h" using namespace rapidjson; -void coord_separator(std::ostringstream& os, int i, int n); +void coord_separator(std::ostringstream& os, R_xlen_t i, R_xlen_t n); void begin_wkt(std::ostringstream& os, std::string& geom_type, R_xlen_t& coord_dim ); diff --git a/revdep/README.md b/revdep/README.md new file mode 100644 index 0000000..b3df357 --- /dev/null +++ b/revdep/README.md @@ -0,0 +1,30 @@ +# Platform + +|field |value | +|:--------|:----------------------------| +|version |R version 3.6.1 (2019-07-05) | +|os |macOS High Sierra 10.13.6 | +|system |x86_64, darwin15.6.0 | +|ui |RStudio | +|language |(EN) | +|collate |en_AU.UTF-8 | +|ctype |en_AU.UTF-8 | +|tz |Australia/Melbourne | +|date |2020-03-15 | + +# Dependencies + +|package |old |new |Δ | +|:---------|:-----|:-----|:--| +|geojsonsf |1.3.0 |1.3.3 |* | + +# Revdeps + +## Failed to check (3) + +|package |version |error |warning |note | +|:------------------------------------------|:-------|:------|:-------|:----| +|[mapdeck](failures.md#mapdeck) |0.2.1 |__+1__ | |-2 | +|[spatialwidget](failures.md#spatialwidget) |0.2 |__+1__ | | | +|vapour |0.5.0 |1 | | | + diff --git a/revdep/checks.noindex/TargomoR/TargomoR_0.2.0.tar.gz b/revdep/checks.noindex/TargomoR/TargomoR_0.2.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..b4a45c8af324df3b38b4aa99dd1445b41fb925ac GIT binary patch literal 106112 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%0A8^JpPcFf;CTos&Q5 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�^{9 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 Ux&PdM?&kCV0P6TG8vy7708+_A00000 literal 0 HcmV?d00001 diff --git a/revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/00check.log b/revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/00check.log new file mode 100644 index 0000000..1c96817 --- /dev/null +++ b/revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/00check.log @@ -0,0 +1,54 @@ +* using log directory ‘/Users/dave/Documents/github/geojsonsf/revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck’ +* using R version 3.6.1 (2019-07-05) +* using platform: x86_64-apple-darwin15.6.0 (64-bit) +* using session charset: UTF-8 +* using options ‘--no-manual --no-build-vignettes’ +* checking for file ‘TargomoR/DESCRIPTION’ ... OK +* checking extension type ... Package +* this is package ‘TargomoR’ version ‘0.2.0’ +* package encoding: UTF-8 +* checking package namespace information ... OK +* checking package dependencies ... OK +* checking if this is a source package ... OK +* checking if there is a namespace ... OK +* checking for executable files ... OK +* checking for hidden files and directories ... OK +* checking for portable file names ... OK +* checking for sufficient/correct file permissions ... OK +* checking whether package ‘TargomoR’ can be installed ... OK +* checking installed package size ... OK +* checking package directory ... OK +* checking DESCRIPTION meta-information ... OK +* checking top-level files ... OK +* checking for left-over files ... OK +* checking index information ... OK +* checking package subdirectories ... OK +* checking R files for non-ASCII characters ... OK +* checking R files for syntax errors ... OK +* checking whether the package can be loaded ... OK +* checking whether the package can be loaded with stated dependencies ... OK +* checking whether the package can be unloaded cleanly ... OK +* checking whether the namespace can be loaded with stated dependencies ... OK +* checking whether the namespace can be unloaded cleanly ... OK +* checking loading without being on the library search path ... OK +* checking dependencies in R code ... NOTE +Namespace in Imports field not imported from: ‘xml2’ + All declared Imports should be used. +* checking S3 generic/method consistency ... OK +* checking replacement functions ... OK +* checking foreign function calls ... OK +* checking R code for possible problems ... OK +* checking Rd files ... OK +* checking Rd metadata ... OK +* checking Rd cross-references ... OK +* checking for missing documentation entries ... OK +* checking for code/documentation mismatches ... OK +* checking Rd \usage sections ... OK +* checking Rd contents ... OK +* checking for unstated dependencies in examples ... OK +* checking examples ... OK +* checking for unstated dependencies in ‘tests’ ... OK +* checking tests ... OK + Running ‘testthat.R’ +* DONE +Status: 1 NOTE diff --git a/revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/00install.out b/revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/00install.out new file mode 100644 index 0000000..a723f82 --- /dev/null +++ b/revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/00install.out @@ -0,0 +1,13 @@ +* installing *source* package ‘TargomoR’ ... +** package ‘TargomoR’ successfully unpacked and MD5 sums checked +** using staged installation +** R +** byte-compile and prepare package for lazy loading +** help +*** installing help indices +*** copying figures +** building package indices +** testing if installed package can be loaded from temporary location +** testing if installed package can be loaded from final location +** testing if installed package keeps a record of temporary installation path +* DONE (TargomoR) diff --git a/revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/TargomoR-Ex.R b/revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/TargomoR-Ex.R new file mode 100644 index 0000000..8370055 --- /dev/null +++ b/revdep/checks.noindex/TargomoR/new/TargomoR.Rcheck/TargomoR-Ex.R @@ -0,0 +1,268 @@ +pkgname <- "TargomoR" +source(file.path(R.home("share"), "R", "examples-header.R")) +options(warn = 1) +library('TargomoR') + +base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') +base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv') +cleanEx() +nameEx("attribution") +### * attribution + +flush(stderr()); flush(stdout()) + +### Name: attribution +### Title: Add Targomo Attributions +### Aliases: attribution attributionFreeIframe attributionOtherIframe +### attributionLink addTargomoAttribution + +### ** Examples + +# return the attribution link +attributionLink() + + + + +cleanEx() +nameEx("capabilities") +### * capabilities + +flush(stderr()); flush(stdout()) + +### Name: capabilities +### Title: Get Account Capabilities +### Aliases: capabilities getTargomoCapabilities print.tgm_capabilities + +### ** Examples + + + + + +cleanEx() +nameEx("formatting") +### * formatting + +flush(stderr()); flush(stdout()) + +### Name: formatting +### Title: Format Edgeweights (times and distances) +### Aliases: formatting numericEdgeWeight prettyEdgeWeight + +### ** Examples + +numericEdgeWeight("1hr 30m", "time") # 5400 +numericEdgeWeight("1ml", "distance") # 1609 + +prettyEdgeWeight(1245, "time") # 30min 45s +prettyEdgeWeight(1245, "distance") # 1km 245m + + + + +cleanEx() +nameEx("getTargomoMapURL") +### * getTargomoMapURL + +flush(stderr()); flush(stdout()) + +### Name: getTargomoMapURL +### Title: Targomo Map Tiles URL +### Aliases: getTargomoMapURL + +### ** Examples + +getTargomoMapURL(style = "toner", api_key = NULL) + + + + +cleanEx() +nameEx("getTargomoPolygons") +### * getTargomoPolygons + +flush(stderr()); flush(stdout()) + +### Name: getTargomoPolygons +### Title: Add Targomo Polygons to a Leaflet Map +### Aliases: getTargomoPolygons drawTargomoPolygons addTargomoPolygons + +### ** Examples + + + + + +cleanEx() +nameEx("options") +### * options + +flush(stderr()); flush(stdout()) + +### Name: options +### Title: Set Targomo Options +### Aliases: options targomoOptions + +### ** Examples + +targomoOptions(travelType = "transit") +targomoOptions(travelTimes = list("15m", "30m", "45m", "1h"), maxEdgeWeight = "1h") + + + + +cleanEx() +nameEx("polygonDrawOptions") +### * polygonDrawOptions + +flush(stderr()); flush(stdout()) + +### Name: polygonDrawOptions +### Title: Options for Drawing Polygons on the Map +### Aliases: polygonDrawOptions + +### ** Examples + +# show the list +polygonDrawOptions() + + + + +cleanEx() +nameEx("routeDrawOptions") +### * routeDrawOptions + +flush(stderr()); flush(stdout()) + +### Name: routeDrawOptions +### Title: Options for Drawing Routes on the Map +### Aliases: routeDrawOptions + +### ** Examples + +# show the list +routeDrawOptions() + + + + +cleanEx() +nameEx("routes") +### * routes + +flush(stderr()); flush(stdout()) + +### Name: routes +### Title: Add Targomo Routes to a Leaflet Map +### Aliases: routes getTargomoRoutes drawTargomoRoutes addTargomoRoutes + +### ** Examples + + + + + +cleanEx() +nameEx("setTargomoVariables") +### * setTargomoVariables + +flush(stderr()); flush(stdout()) + +### Name: setTargomoVariables +### Title: Set Targomo Environment Variables +### Aliases: setTargomoVariables + +### ** Examples + +## Not run: +##D # write to a global file at Sys.getenv("HOME") +##D setTargomoVariables(api_key = "YOUR_SECRET_KEY", region = "asia", overwrite = TRUE, global = TRUE) +## End(Not run) + + + + +cleanEx() +nameEx("tiles") +### * tiles + +flush(stderr()); flush(stdout()) + +### Name: tiles +### Title: Add Targomo Basemaps to a Leaflet Map +### Aliases: tiles addTargomoTiles targomoMapStyles + +### ** Examples + +# list Targomo Map Styles +targomoMapStyles() + + + + +cleanEx() +nameEx("timeDrawOptions") +### * timeDrawOptions + +flush(stderr()); flush(stdout()) + +### Name: timeDrawOptions +### Title: Options for Drawing Times on the Map +### Aliases: timeDrawOptions + +### ** Examples + +# show the list +timeDrawOptions() + + + + +cleanEx() +nameEx("timeLegendOptions") +### * timeLegendOptions + +flush(stderr()); flush(stdout()) + +### Name: timeLegendOptions +### Title: Time Legend Options +### Aliases: timeLegendOptions + +### ** Examples + +# show the list +timeLegendOptions() + + + + +cleanEx() +nameEx("times") +### * times + +flush(stderr()); flush(stdout()) + +### Name: times +### Title: Add Targomo Times to a Leaflet Map +### Aliases: times getTargomoTimes drawTargomoTimes addTargomoTimes + +### ** Examples + + + + + +### *