duckspatial_df becomes the main class of
duckspatial. It represents a lazy, table-like object whose
data is not loaded into memory until explicitly materialized (with
ddbs_collect() or st_as_sf()). Every function
now accepts this class as input, and it’s the returned class by default.
If the user wants to materialize the result in the same way
sf would do, that can be done with mode = "sf"
(#55, #63).
ddbs_buffer(): now has four new arguments:
num_triangles, cap_style,
join_style, and mitre_limit (#72).
ddbs_union(): is split into two new functions
depending on the desired behavior: ddbs_union() and
ddbs_union_agg() (#77).
ddbs_length(), ddbs_area() and
ddbs_distance(): now use by default the best DuckDB
function (e.g. ST_Area() or
ST_Area_Spheroid()) depending on the input’s CRS. They also
return a duckspatial_df object by default rather than a
materialized vector. In the case of ddbs_distance(), it
returns a tbl_duckdb_connection (#80, #82, #103).
ddbs_simplify(): tolerance defaults to 0; gains a
new argument preserve_topology specified before
conn (#86).
ddbs_is_simple(), ddbs_is_valid(),
ddbs_area(), ddbs_length(),
ddbs_distance(): the new_column argument now
defaults to a column name, as we now encourage the users to keep most of
the work inside DuckDB, rather than materialize the result. For
materializing a vector in R, use mode = "sf". This argument
is also moved before conn argument (#83).
ddbs_predicate() and colleagues: they gain new
arguments: name, mode, overwrite, and quiet. When
mode = "duckspatial", they return a lazy tbl backed by
DuckDB. When mode = "sf", they return a list/matrix
(#105).
ddbs_as_points(): converts a table with coordinates
into a spatial object (#75).
ddbs_geometry_type(): returns the geometry type of
an object (#76).
ddbs_as_geojson(): converts the geometry to geojson
format (#84).
ddbs_perimeter(): calculates the perimeter of
polygons (#89).
New geometry validation/check functions:
ddbs_is_empty(), ddbs_is_ring() and
ddbs_is_closed() (#91).
ddbs_sym_difference(): performs symmetric difference
between pairs of geometries (#91).
ddbs_force_2d(), ddbs_force_3d(),
ddbs_force_4d(): force the geometries to have specfic
dimensions (#91).
ddbs_has_z() and ddbs_has_m(): check if
the geometry has the dimension (#91).
ddbs_polygonize(), ddbs_build_area():
generates polygons from lines (#91).
ddbs_voronoi(): generates Voronoi diagrams from
point geometries (#91).
ddbs_endpoint() and ddbs_start_point():
extracts the start/end point of a linestring geometry (#91).
ddbs_flip_coordinates(): swaps X and Y coordinates
(#91).
ddbs_register_vector(),
ddbs_write_vector() and ddbs_read_vector()
deprecated in favour of ddbs_register_table(),
ddbs_write_table() and ddbs_read_table()
(#100).
ddbs_x() and ddbs_y(): extract the
x and y coordinates of points (#108).
ddbs_drop_geometry(): drops the geometry column of a
duckspatial_df object.
ddbs_options(): to set some duckspatial
default options.
ddbs_join(): dwithin is now implemented for spatial
join.
Improve the documentation of the functions (#85).
ddbs_buffer(): warns if the input CRS is not a
projected CRS, as the distance uses its units.
ddbs_quadkey(): can aggregate by field
when output is polygon and tilexy
(#78).
ddbs_crs(): accepts CRS codes and crs
objects as inputs. It returns NULL when the input doesn’t
have a geometry (e.g. a data.frame) (#87).
ddbs_create_conn(): now has … that are paseed to
dbConnect() for extra configuration.
ddbs_length(), ddbs_area() and
ddbs_distance() were calculating the wrong measure when the
CRS was geographic (#82).
ddbs_filter(predicate = "dwithin") and
ddbs_is_within_distance were calculating wrong distances
for geographic CRS (#88).
Learn more about this version here.
conn argument defaults now to NULL.
This parameter is not mandatory anymore in spatial operations, and it
will be handled internally. The argument has been moved after
x, y, and function-mandatory arguments
(#9).
ddbs_write_vector() allows to create a temporary
view with the argument temp = TRUE, which is much faster
than creating a table (#14).
ddbs_read_vector() uses internal optimizations with
geoarrow making it much faster (#15).
The spatial functions allow now to have either an sf
or a DuckDB table as input (x) and/or output
(name = NULL or name != NULL) (#19).
The crs and crs_column arguments are
deprecated and will be removed in duckspatial v1.0.0. This
change aligns with planned native CRS support in DuckDB, scheduled for
v1.5.0 (expected February 2025) (#7).
Affine functions: ddbs_rotate(),
ddbs_rotate_3d(), ddbs_shift(),
ddbs_flip(), ddbs_scale(), and
ddbs_shear() (#37).
ddbs_boundary(): returns the boundary of geometries
(#17).
ddbs_concave_hull(): new function to create the
concave hull enclosing a geometry (#23).
ddbs_convex_hull(): new function to create the
convex hull enclosing a geometry (#23).
ddbs_create_conn(): new convenient function to
create a DuckDB connection with spatial extension installed and
loaded.
ddbs_drivers(): get list of GDAL drivers and file
formats supported by DuckDB spatial extension.
ddbs_join(): new function to perform spatial join
operations (#6).
ddbs_length(): adds a new column with the length of
the geometries (#17).
ddbs_area(): adds a new column with the area of the
geometries (#17).
ddbs_distance(): calculates the distance between two
geometries (#34).
ddbs_is_valid(): adds a new logical column asserting
the simplicity of the geometries (#17).
ddbs_is_valid(): adds a new logical column asserting
the validity of the geometries (#17).
ddbs_make_valid(): makes the geometries valid
(#17).
ddbs_simplify(): makes the geometries simple
(#17).
ddbs_bbox(): calculates the bounding box
(#25).
ddbs_envelope(): returns the envelope of the
geometries (#36).
ddbs_union(): union of geometries (#36).
ddbs_combine(): combines geometries into a
multi-geometry (#36).
ddbs_quadkey(): calculates quadkey tiles from point
geometries (#52).
ddbs_exterior_ring(): returns the exterior ring
(shell) of a polygon geometry (#45).
ddbs_make_polygon(): create a POLYGON from a
LINESTRING shell (#46).
ddbs_predicate(): spatial predicates between two
geometries (#28).
ddbs_intersects(), ddbs_crosses(),
ddbs_touches(), …: shortcuts for e.g.:
ddbs_predicate(predicate = "intersects") (#28).
ddbs_transform(): transforms from one coordinates
reference system to another (#43).
ddbs_as_text(): converts geometries to well-known
text (WKT) format (#47).
ddbs_as_wkb(): converts geometries to well-known
binary (WKB) format (#48).
ddbs_generate_points(): generates random points
within the bounding box of x (#54).
Spatial predicates: spatial predicates are all
included in a function called ddbs_predicate(), where the
user can specify the spatial predicate. Another option, it’s to use the
spatial predicate function, such as ddbs_intersects(),
ddbs_crosses(), ddbs_touches(), etc.
All functions now have a parameter quiet that allows
users to suppress messages (#3).
Spatial operations now don’t fail when a column has a dot (#33).
Added some vignettes (#42).
ddbs_filter(): uses intersects for
ST_Intersects instead of
intersection.
ddbs_filter(): doesn’t return duplicated
observations when the same geometry fulfills the spatial predicate in
more than one geometries of y (#50).
ddbs_read_vector(): gains a new argument
clauses to modify the query from the table (e.g. “WHERE …”,
“ORDER BY…”)ddbs_list_tables(): lists table schemas and tables
inside the database
ddbs_glimpse(): check first rows of a table
ddbs_buffer(): calculates the buffer around the
input geometry
ddbs_centroid(): calculates the centroid of the
input geometry
ddbs_difference(): calculates the geometric
difference between two objects
ddbs_intersection(): overwrite argument defaults to
FALSE instead of NULL
Better schemas management. Added support for all functions.