                        Changes in version 1.1-4                        

  - add TIN, POLYHEDRALSURFACE and TRIANGLE to vctrs methods; #2632

  - st_combine() preserves the precision of input object; #2618

  - fix st_write() for writing binary blobs; #2629

                 Changes in version 1.1-3 (2026-09-11)                  

  - move st_interpolate_aw.stars() from stars to sf, to get ready for
    using GEOS::GEOSGridIntersectionFractions() in the future

  - guess Parquet driver from .parquet file extension; #2506

  - restore the graphics state after a failed plot.sf() key; #2611

  - adapt tests to changes in GEOS >= 3.15.0

  - new argument round to st_coordinates to round output coordinates to
    a given precision level; #2620

                 Changes in version 1.1-2 (2026-07-23)                  

  - remove use of .Dim in structure()

                 Changes in version 1.1-1 (2026-05-06)                  

  - use RAII in functions calling GEOS for handling context, based on
    how terra does this; #2604

  - st_graticule() simplifies output lines; #1364

  - dplyr::count() drops geometries if .drop_geom = TRUE is set; #2596

  - better handle graticules crossing the antemeridian; #2561

  - add the option by_element = TRUE to binary geometry predicates,
    measures and transformers; #2594 and #2595 by @rariariari w. help
    from Claude

  - add MULTISURFACE and CURVEPOLYGON to vctrs methods; #2589 #2601 ￼

  - add argument include_non_intersected to st_interpolate_aw()

  - add argument weights, for dasymetric mapping, to st_interpolate_aw()
    (experimental)

  - replace magrittr pipe %>% with base pipe |>, and hence require R
    >= 4.1.0

                 Changes in version 1.1-0 (2026-02-24)                  

  - gdal_compressors() queries GDAL compressor and decompressor
    capabilities

  - st_cast.sfc() deals with zero-length objects; #2584

  - rewrite/migrate vctrs methods for sf and sfc; #2568, #2584, w. help
    from @DavisVaughan

  - st_agr() and st_agr<-() better handle multiple geometry columns

  - for an sfc object x, x[0] retains the class of x; #2568

  - When sampling a degenerate (zero length) line, a warning is raised
    rather than a message; #2575

                 Changes in version 1.0-24 (2026-01-12)                 

  - gdal_write() handles drivers that only have a CreateCopy() option;
    https://github.com/r-spatial/stars/issues/762

  - if datum is missing in a call to st_graticule(), a graticule by
    default will try to use the geographic coordinate reference system
    of arguments x or crs; when nothing is found there it falls back to
    OGC:CRS84 (WGS84).

  - the figure margins parameter mar can be specified in a call to
    plot.sf(); #2558

  - fix class label setting in [.sf(); #2557

                 Changes in version 1.0-23 (2025-11-28)                 

  - allow tests reading blosc compressed Zarr files to fail

  - st_as_sf.data.frame() sets z_range and m_range if needed;
    https://github.com/geoarrow/geoarrow-r/issues/75

                 Changes in version 1.0-22 (2025-11-10)                 

  - st_combine() on POINT geometries ignores empty points; #2551

  - handle empty points better in st_point(), st_as_sf.data.frame() and
    st_distance(); https://github.com/r-spatial/s2/issues/289

  - for unprojected lines, st_line_interpolate() requires distance
    values with degree units; #2542

  - unique.sfc() added; #2546

  - for geodetic coordinates, st_perimeter() uses ellipsoidal
    computation if sf_use_s2() is FALSE; #2541

  - st_as_sf.owin() and st_as_sfc.owin() no longer ignore crs argument;
    #2532

  - clarify approximation errors in st_buffer() and how they differ for
    the GEOS or S2 backends, with examples by David Kaplan
    @dmkaplan2000; #2528

                 Changes in version 1.0-21 (2025-05-15)                 

  - st_crs(..., parameters = TRUE) returns base geographic CRS as
    gcs_crs; #2524

  - loading sf no longer initializes the RNG state; see
    https://github.com/r-quantities/units/issues/409

  - fix st_sample() on geodetic coordinates; #2515

  - use compareVersion() consistently to compare GDAL versions; #2512

                 Changes in version 1.0-20 (2025-03-24)                 

  - st_buffer() on geodetic coordinates with negative buffer distance
    now automatically switches to using GEOS, while giving a warning;
    #1987

  - st_interpolate_aw() fixes bug when a GEOMETRYCOLLECTION contains
    multiple POLYGON structures; found by @mtennekes

  - st_buffer() for geodetic coordinates allows max_dist and min_level
    to be specified by feature; #2488 and
    https://github.com/r-spatial/s2/pull/264

  - distinct.sf() allows for comparing exact equality of geometries when
    exact = TRUE; #2484

  - st_minimum_bounding_circle() returns geometries representing the
    smallest circle that contains the input; #2473

                 Changes in version 1.0-19 (2024-11-05)                 

  - fix type checks in C++ GDAL area and length computation functions,
    anticipating GDAL 3.10.0; #2466, #2468, #2469 by @rsbivand and
    @rouault

  - improve test on empty geometries, which changed in 1.0-18; #2463

  - gdal_utils() ogrinfo has an argument read_only which, when TRUE (or
    options includes "-ro"), opens a datasource in read-only mode
    (#2460; sf did this before 1.0-17); by default a datasource is
    opened in update (read-write) mode (since sf 1.0-17; #2420)

  - the sf -> ppp conversion as.ppp.sf() accepts a data.frame of marks
    instead of just 1 column #2450, by @agila5

  - add flag for preservation of point order in st_voronoi #1371 for
    GEOS >= 3.12

                 Changes in version 1.0-18 (2024-10-11)                 

  - support POLYGON FULL simple feature geometry, representing the
    entire Earth surface, as used by s2geometry; see also
    https://r-spatial.org/r/2024/10/11/polygonfull.html for a longer
    introduction; #2441

  - st_sfc() has an argument oriented which, when set to TRUE, adds an
    attribute oriented=TRUE to an sfc object, indicating that this
    object should not be reoriented in conversion to s2_geography
    (avoiding using the global option s2_oriented); st_as_sfc.bbox()
    sets this to TRUE; #2441

  - fix build failure with GDAL < 3.4.0 #2436

  - st_simplify() now accepts feature-wise tolerance values when s2 is
    switched on #2442

                 Changes in version 1.0-17 (2024-09-06)                 

  - add st_transform() method for bbox objects; this uses
    OGRCoordinateTransformation::TransformBounds(), densifying first and
    antemeridian proof; #2415

  - st_filter.sf() correctly scopes x and y arguments using !! operator;
    #2416

  - [.sfc and [<-.sfc use matrix/array type subsetting for sfc objects
    that have a dim attribute

  - add st_exterior_ring() to extract exterior rings (remove holes);
    #2406

  - add text.sf(), text.sfc(), points.sf(), points.sfc() to annotate
    base plots at geometry centroids; #2399

  - st_sf() no longer strips tbl or tbl_df class labels; #2378

  - st_layers() returns an object of class c("sf_layers", "data.frame"),
    with a dedicated print method.

  - when dim is not XYZM, sf_as_sf.data.frame() interprets a length 4
    coords argument to specify the corners of a rectangular polygon;
    #2357

  - st_interpolate_aw() gains an na.rm argument, for removing features
    with NA attributes before interpolating; #830

  - merge.sf() no longer renames geometry column; #2334

                 Changes in version 1.0-16 (2024-03-24)                 

  - st_join() no longer renames the geometry column; #2327

  - st_sample() works when unprojected polygon geometry crosses the
    antemeridian; #2331

  - clean up and modernization of S3 registration of methods and tests;
    #2285, #2288, #2316, #2341, #2342, by @olivroy

  - [.sfc works when setting argument op; #2320

  - st_sample() for polygons is sensitive to setting oriented = TRUE to
    prevent wrongly correcting ring directions; #2308

  - add support for the GDAL footprint utility (requiring GDAL >= 3.8.0)
    to gdal_utils; #2305, by @goergen95

  - existing environment variables PROJ_LIB and PROJ_DATA are (again)
    ignored on sf binary CRAN installations (win + macos), effectively
    by overwriting them during the R session and restoring them on exit;
    this does not happen if environment variable R_SF_USE_PROJ_DATA is
    set to true. #2298

  - add st_line_project() to find how far a point is when projected on a
    line; #2291

  - add st_line_interpolate() to obtain a point at a certain distance
    along a line; #2291

                 Changes in version 1.0-15 (2023-12-18)                 

  - add st_perimeter() generic to cover both geographic and projected
    coordinates; #268, #2279, by @JosiahParry

  - add st_sample() method for bbox, with special provisions for
    ellipsoidal coordinates; #2283

  - documentation clean-up by @olivroy; #2266, #2285

  - st_convex_hull() uses s2::s2_convex_hull() for geodetic coordinates;
    #2250

  - add directed argument to st_line_merge(); #2264

  - st_union.sfc() given x and y works consistently across geodetic and
    projected objects; #2262

  - st_union.sf() given x and y unions pairwise if by_feature = TRUE;
    #2259

  - st_read() work around issue with GPKG driver if wkt_filter is set;
    #2248

  - st_read() uses GDAL's stream reading when use_stream = TRUE; #2238
    by @paleolimbot

  - st_transform() responds to in-session changes to sf_proj_network();
    #2166

  - plot.sf(): key.width is sensitive to pointsize graphics parameter
    par("ps"); keys with factor levels suggest a proper size if they
    won't fit.

  - plot.sf(): key.pos can hold a second value in [0, 1] determining the
    relative position of the key in the available space

  - [<-.sf fixes the agr attribute when it is broken; #2211

  - if the env. variable ADD_SF_NAMESPACE is set to true, sf objects get
    a new attribute, .sf_namespace, which forces loading the sf
    namespace when it has not been loaded so far, e.g. for proper
    printing or plotting of an sf object; #2212 by Mike Mahoney

  - distinct.sf() is type-safe for sf objects with zero rows; #2204

  - summarise.sf() raises an error if .by is given but no across() on
    the geometry; #2207

  - st_write() matches fields on name first, than on position; this
    matters for formats that have pre-defined names, such as GPX; #2202

                 Changes in version 1.0-14 (2023-07-11)                 

  - fix plot.sf() when using a key for multiple factor variables; #2196,
    #2195

  - fix use of as.numeric_version in a test, for upcoming change in
    r-devel

  - code tidy-ing: fix many lintr suggestions, thanks to Michael Chirico
    (#2181 - #2191)

                 Changes in version 1.0-13 (2023-05-24)                 

  - gdal_utils() adds "ogrinfo" utility (requires GDAL >= 3.7.0); #2160

  - st_as_sf() catches errors when setting invalid crs values, raised by
    Jon Skøien

  - add rename_with.sf() method; #1472

  - use GEOS' overlayNG routines for (GEOS) Intersection, Difference,
    Union and SymDifference; #2143

  - added duplicated.sf(); #2138, #2140, thanks to @bart1

  - select.sf() allows selecting the same column twice under different
    names; #1886

  - st_as_sf.ppplist() is deprecated; #1926

  - st_cast() handles empty geometries; #1961

  - don't repeat longlat messages in summarise.sf(); #1519

  - fix random sampling on the sphere; #2133

                 Changes in version 1.0-12 (2023-03-19)                 

  - update NAMESPACE to useDynLib(sf, .registration=TRUE); #2127 thanks
    to @eddelbuettel

  - fix call in gdal_addo(); #2124

  - fix issues that came up with older GDAL version, use
    GDAL_VERSION_NUM consistently; #2123 #2121 #2119

                 Changes in version 1.0-11 (2023-03-15)                 

  - st_make_grid() also accepts area units for cellsize, for square and
    hexagonal grids; #1505

  - add st_concave_hull(), for concave hulls, if GEOS >= 3.11.0; #1964

  - add st_triangulate_constrained(), for constrained Delaunay
    triangulation, if GEOS >= 3.10.0; #1964

  - clean up the retrieval of length or angle units from WKT
    representations;
    https://lists.osgeo.org/pipermail/gdal-dev/2023-March/056994.html

  - conversion to GEOS uses the GEOS_PREC_VALID_OUTPUT flag, which makes
    sure that the "[o]utput is always valid. Collapsed geometry elements
    (including both polygons and lines) are removed."

                 Changes in version 1.0-10 (2023-03-12)                 

  - gdal_utils() has a config_options argument to set further GDAL
    options, just like st_write(); #2003

  - fix slow writing of logical vectors in st_write(); #1409; #1689

  - st_drivers() has an argument regex to filter on driver (long) name;
    #2090

  - drop C++11 as a system requirement

  - c.sfc() (and, consequently, dplyr::bind_rows()) gives an error if
    components have different CRS; #1884

  - data imported from maps are associated with the Clark 1866
    ellipsoid; #2080

  - fix importing legacy SpatialPolygon objects without comments; #2063,
    #2069, https://github.com/rstudio/leaflet/issues/833

  - st_read() no longer errors on mixes of XY and XYZ geometries; #2046
    #1592

  - in plot.sf(), when numeric breaks are given a legend key is always
    plotted; #2065

  - st_crs()$axes returns a data.frame with axes properties (name,
    orientation, conversion factor) when GDAL >= 3.0.0

  - clean up unit handling for geometry measures (length, area,
    distance) and crs;

  - st_crs(x)$ud_unit returns NULL if units are unknown; #2049

  - st_write() substitutes an NA crs with ENGCRS["Undefined Cartesian
    SRS with unknown unit"]; #2049, #2054

  - st_can_transform() checks whether a transformation between two crs
    exists; see https://github.com/dieghernan/tidyterra/issues/64; #2049

  - the matrix returned by st_coordinates() has no row names, to reduce
    output size

                 Changes in version 1.0-9 (2022-11-08)                  

  - adjust for changes how R-devel handles POSIXlt; #2028

  - add st_break_antimeridian(); #1983, #1991 by Roger Bivand

  - add Fibonacci as a spatial sampling type in st_sample()

  - use the global options("sf_use_s2") to determine whether to use s2,
    rather than a value in a local environment; #1977

  - fix utils mdiminfo and mdimtranslate in gdal_utils()

  - extend arguments of gdal_read_mdim() needed by stars::read_mdim() if
    stars >= 0.5-7; add gdal_write_mdim()

  - add drop_na() method for sf objects; #1975

                 Changes in version 1.0-8 (2022-07-14)                  

  - st_drop_geometry.default() returns x unmodified;

  - sf_project() accepts 3- or 4-column matrices, containing z and t
    values;

  - optimization for st_sfc() by @paleolimbot; #1938, #1925

  - [<-.sfc() recomputes the bounding box; st_sfc() gets parameter
    compute_bbox; #1965

  - add new algorithm and drop option to st_make_valid() when using GEOS
    and GEOS >= 3.10.1; #1655

  - add st_minimum_rotated_rectangle(), available when GEOS >= 3.9.0;
    #1953

  - fix st_sample() with type = "hexagonal" for corner case (n=1), add a
    progress argument for a progress bar; #1945

  - add package pbapply to Suggests; #1945

  - add pdf driver to windows build; #1942

  - clarify pipeline argument in st_transform() when axis order is
    ambiguous; #1934

  - handle argument xpd in calls to plot.sfc_POLYGON() and
    plot.sfc_MULTIPOLYGON()

  - add pivot_wider() method, by Henning Teickner; #1915

  - add gdal_addo() to add or remove overviews from raster images; #1921

  - st_layers() returns crs of each layer in a crs list of crs objects

  - restore st_graticule() behaviour to pre-sf 1.0-0;
    https://github.com/tidyverse/ggplot2/issues/4571

  - gdal_metadata() sets metadata item names properly

  - st_read() gains an argument optional passed on to as.data.frame to
    avoid changing column names; #1916

  - GPX files are autodetected by st_read(); #1917

  - unnecessary coordinate names are not returned in st_sample(), making
    the output size smaller; #1879

                 Changes in version 1.0-7 (2022-03-07)                  

  - st_drop_geometry() is a generic; #1914

  - st_crs(x)$ud_unit returns the unit of the coordinate reference
    system of x

  - geometric predicates return sgbp objects omitting self-intersections
    etc. by passing remove_self = TRUE and unique symmetric relationship
    by passing retain_unique = TRUE (to ... if needed); this simplifies
    identifying (and removing) duplicated geometries; duplicates are
    identified by e.g. by st_equals(x, retain_unique = TRUE) |> unlist()
    |> unique(); #1893

  - fix compile issue against GDAL < 2.5.0 introduced in 1.0-6; #1899

                 Changes in version 1.0-6 (2022-02-04)                  

  - adapt to new spatstat.random package; #1892

  - st_geometry<-() also allows to rename a geometry column in an sf
    object; #1890

  - for sf objects, the st_as_sfc() method is an alias for
    st_geometry(); #1882

  - st_make_grid() speeded up; #1579 thanks to Krzysztof Dyba

  - remove direct and indirect dependencies on rgeos and rgdal; #1869

  - use stats::dist rather than GEOS for symmetric point-point Euclidian
    distance computation; #1874

                 Changes in version 1.0-5 (2021-12-17)                  

  - package startup message reports status of sf_use_s2(); #1782

  - sf_use_s2() uses message() to report a change; #1782

  - st_sample() using regular sampling for ellipsoidal coordinates
    "works" as if coordinates were Cartesian; #1837

                 Changes in version 1.0-4 (2021-11-14)                  

  - new function st_delete() deletes a data source, or layer(s) within a
    data source; #1828

  - fix memory leak in WKT1_ESRI retrieval; #1690

                 Changes in version 1.0-3 (2021-10-07)                  

  - cope with how GEOS >= 3.10.0 handles illegal geometries (e.g.,
    non-closed rings); #1807

  - crs objects have a $srid method to extract the SRID (as authority
    "name:code"); #1804

  - st_as_grob() methods for sfc_* objects correctly handle empty
    geometries; #1789 with help from Hiroaki Yutani

  - when writing objects with NA as CRS to GeoPackage, assign "Unknown
    Cartesian CRS" first - this is in line with using Cartesian geometry
    operations for objects with NA as CRS; #1776

  - add coerce method from sgbp to sparseMatrix; #1750

  - fix st_cast() for GEOMETRYCOLLECTIONS containing empty geometries;
    #1767

  - fix st_is_valid() for bogus polygons and projected coordinates;
    #1666, #1760; #1761

                 Changes in version 1.0-2 (2021-07-26)                  

  - st_read() and st_write() using GDAL handle binary attributes
    (OFTBinary fields) ; #1721

  - a pivot_longer method is added for sf objects (the data.frame method
    works, but raises a warning)

  - rbind.sf preserves primary geometry column; #1717

  - configure constrains using --static to Darwin platform; #1702,
    #1712, #1713

  - old-style crs objects created with sf < 0.9-0 generate a message,
    and will cause a warning in the future.

  - when st_crs() is called with a WKT2 as text input, its input field
    will be replaced with the CRS name (if it has one).

  - GEOS (>= 3.9.0) operations use GEOSGeom_setPrecision_r to set
    precision of geometries; #1535

  - st_read() with specified query ignores argument layers, and warns if
    it is given; #1444

                 Changes in version 1.0-1 (2021-06-29)                  

  - fix regression in st_intersection(): when using s2 attributes were
    assigned wrongly; #1704

  - crs (sf) to CRS (sp) conversion no longer needs validation by rgdal;
    https://github.com/edzer/sp/issues/107

  - retrieve ESRI's WKT version of CRS by st_crs(id)$WKT1_ESRI; #1690

                 Changes in version 1.0-0 (2021-06-09)                  

  - add s2 to Imports:

  - add Dewey Dunnington to contributors

  - sf_use_s2() prints a message when using s2 has been switched to on
    or off.

  - use s2 spherical geometry as default when coordinates are
    ellipsoidal. This can be switched off (defaulting to planar
    geometry, using GEOS, as in sf < 1.0-0) by setting environment
    variable _SF_USE_S2 to false before package sf is loaded, or by
    sf_use_s2(FALSE); #1649

  - st_nearest_feature() with missing y returns nearest features in the
    remaining set of x; https://github.com/r-spatial/s2/issues/111

  - st_write() gains an argument config_options to set GDAL config
    options; #1618

  - fix regression in sf_project(..., keep = TRUE); #1635

                 Changes in version 0.9-8 (2021-03-17)                  

  - add st_as_sf() method for terra's SpatVector class; #1567

  - distinct.sf() works by default on all variables, and keeps active
    geometry active; #1613

  - improve (fix?) polygonize/contour code; #1608

  - sf_proj_network() reports whether PROJ uses network (CDN) grids, can
    switch it on or off, and can set the CDN url.

  - st_write() returns obj, invisibly; #1597

  - fix regression in n-ary st_intersection(), #1595, introduced at
    #1549

  - st_inscribed_circle() computes the maximum inscribed circle for
    polygons (requires GEOS >= 3.9.0)

  - allow to st_cast() from COMPOUNDCURVE, MULTISURFACE or CURVEPOLYGON
    to GEOMETRYCOLLECTION, and back; #1573

  - Fixed a bug in st_as_grob() when plotting a mix of MULTI and
    non-MULTI geometries of the same base type

                 Changes in version 0.9-7 (2021-01-06)                  

  - n-ary st_intersection() skips failing geometries, rather than
    returning an error; #1549

  - use s2_centroid() for geographical coordinates if sf_use_s2() is
    TRUE.

  - st_as_text() method for crs objects can return projjson (if GDAL
    >= 3.1.0 and PROJ > 6.2.0)

  - st_transform() no longer warns on conversions like "+proj=ob_tran
    +o_proj=longlat +o_lat_p=45 +o_lon_p=30"

  - st_as_wkb() takes srid from wkt field of crs when input field
    doesn't contain it; #1490

  - plot.sf() adds key.pos=0 option to run the logic behind the key
    without plotting it; #1487

  - fix bug in select.sf() when selected variables were renamed; #1483

  - st_as_sf.stars(..., merge = TRUE) now works if CRS is NA; #1389

  - add (dynamically loaded) as_wkb() methods for sf, sfc and sfg,
    making st_as_s2() unnecessary

  - st_as_s2() transforms non-longlat objects to EPSG:4326 first

                 Changes in version 0.9-6 (2020-09-13)                  

  - gdal_utils() print (GDAL-style) progress bar if quiet = FALSE
    (except for info and mdiminfo)

  - fix CPL_gdal_warper for multi bands;
    https://github.com/r-spatial/stars/issues/320

  - sf_proj_search_paths() retrieves and sets the proj search path (if
    GDAL > 3.0.3)

  - when loading sf, sf_use_s2() is set to FALSE unless environment
    variable _SF_USE_S2 equals true (this changes to TRUE in sf 1.0-0)

  - resolve GDAL/PROJ version vulnerabilities in CRS-crs conversion;
    #1479

  - st_sample() gains an argument, by_polygon, to more clevery sample
    MULTIPOLYGON geometries; #1480

  - st_sample() accepts non-integer sample sizes, with a (suppressable)
    warning and handles values of sizes that would round to zero; #1480

  - gdal_utils() adds utils mdiminfo and mdimtranslate (requires GDAL
    >= 3.1)

  - st_union() gains an argument is_coverage, which, when set to TRUE,
    leads to much faster unioning in case features form a coverage
    (polygons don't overlap); #1462 by Don Baston

  - fix gdal_utils("translate") locking input file; #1452

  - st_make_grid() no longer selects cells intersecting with x; #1447

  - use s2::s2_dwithin_matrix() in st_is_within_distance(); #1367

                 Changes in version 0.9-5 (2020-07-14)                  

  - Only when package s2 >= 1.0.1 is available: support for spherical
    geometry operators (predicates, transformers, measures, nearest
    point/feature) for geographic coordinates in package s2 is now by
    default switched off, and can be switched on by sf_use_s2(TRUE); see
    https://www.r-spatial.org/r/2020/06/17/s2.html and vignette sf7. It
    is planned to be switched on by default in sf 1.0-0.

  - drop Z and/or M coordinate in st_as_s2(), with message

  - geometry predicates and transformers gain an ... argument to pass
    s2::s2_options()

  - dplyr::select() now ensures the geometry column sticks to the back
    rather than the front of the data frame; #1425

  - dplyr::rename() now preserves the active geometry column even when
    it is renamed; #1431

  - proj units query adjusted to PROJ 7.1.0 release; #1434

                 Changes in version 0.9-4 (2020-06-12)                  

  - empty geom generators take care of XYZ etc dim; #1400

  - write_sf() and read_sf() no longer warn when reading tables without
    geometries

  - st_write() writes non-spatial tables when given a plain data.frame
    or tbl_df; #1345

  - the default for stringsAsFactors in st_read and st_sf is FALSE for R
    version >= 4.1.0

  - the sf method for dplyr::select() supports renaming the geometry
    column; #1415

                 Changes in version 0.9-3 (2020-05-04)                  

  - st_is_valid() is a generic

  - Windows CRAN binaries use GDAL 3.0.4, PROJ 6.3.1 and GEOS 3.8.0,
    thanks to Jeroen Ooms' rwinlib work; #1275

  - plot.sf() gains an extent argument to set the extent (xlim, ylim) of
    the plot; extent must be an object with an st_bbox() method, such as
    an sf or a stars object; #1193

                 Changes in version 0.9-2 (2020-04-14)                  

  - st_axis_order(TRUE) gives and error if GDAL has version < 2.5.0

  - loading PROJ units link, us_in, ind_yd, ind_ft, and ind_ch into the
    udunits database is no longer done at package load time, but when
    function sf_add_proj_units() is called.

  - fix line sampling for small densities; #1365

  - sf_project() handles crs objects when PROJ version is below 6 using
    proj.4 string representations.

  - avoid using isFALSE in st_write(); #1342

  - fix regression in gdal_utils("translate", ...); #1339

                 Changes in version 0.9-1 (2020-04-06)                  

  - fix an invalid read bug in st_m_range(); #1332

  - st_crs(4326) == st_crs("+proj=longlat +ellps=WGS84 +datum=WGS84
    +no_defs") returns TRUE for GDAL >= 3.0, irrespective authority
    compliance of axis order; see #1331 and
    https://github.com/ropensci/scrubr/issues/34

  - sf_project() has a parameter authority_compliant to return
    coordinates in "visualisation order"; when TRUE it returns
    coordinates in authority compliant axis order (e.g. EPSG:4326
    latitude longitude); default is st_axis_order().

  - fix test for Solaris and certain GDAL/PROJ versions

  - fix error reading category table through GDAL;
    https://github.com/r-spatial/stars/issues/245

                 Changes in version 0.9-0 (2020-03-24)                  

  - see r-spatial blog post:
    https://www.r-spatial.org/r/2020/03/17/wkt.html

  - modify crs objects to reflect our post-proj4string world (#1146;
    #1225): crs objects contain two fields, input with the user input
    (if any), and wkt with a well-known-text (or WKT2) representation of
    the coordinate reference system. crs objects have a $ method to
    dynamically retrieve the epsg (integer) or proj4string
    representation, using e.g. x$epsg.

  - support for PostGIS 3 using WKT and the new-style crs objects;
    #1234, #1303, #1308 by @etiennebr

  - st_write_db() and st_read_db() are defunct. Use st_write and st_read
    instead.

  - st_write() uses append, replacing (and deprecating) argument update;
    st_write fails when a layer already exists and append has not been
    set explicitly to TRUE (append) or FALSE (overwrite); #1266

  - st_proj_info() was renamed into sf_proj_info; sf_proj_info can get
    and set the PROJ data search path and use of CDN; #1277

  - adapt to new dplyr version;
    https://github.com/tidyverse/dplyr/issues/4917

  - st_sample() is a generic

  - write stars rasters with wkt info, rather than proj4strings

  - when GEOS >= 3.8.0, st_make_valid is provided by sf rather than by
    lwgeom #989

  - allow for single-sided buffers for linear geometries; #1001

  - add st_reverse() methods to reverse points in a linestring (requires
    GEOS >= 3.7.0); #1246

  - st_make_grid() returns grid cells or points that intersect with the
    target geometry, not its bounding box; #1260

  - allow for PROJ >= 7; #1254

  - st_geometry_type() accepts by_geometry argument; #1264

                 Changes in version 0.8-1 (2020-01-28)                  

  - st_as_sf.map() no longer requires maptools and sp; dropped
    dependency on maptools.

  - work around a bug in 6.0.0 <= PROJ < 6.3.1: replace +init=epsg:XXXX
    ... strings with the XXXX EPSG integer, to work around a bug in
    PROJ; see https://github.com/OSGeo/PROJ/pull/1875 and links therein.
    If ... arguments are present, raise a warning that these are
    ignored.

  - st_as_sf.map() no longer requires maptools and sp; drop dependency
    on maptools.

  - conversion between spatstat classes owin, ppp and psp and sf classes
    no longer use maptools; #1204

  - gdal_utils() processes open options -oo and -doo properly;
    https://github.com/ITSLeeds/geofabric/issues/12

  - st_sample() directly interfaces spatstat sampling methods, e.g. type
    = "Thomas" calls spatstat::rThomas after converting input arguments
    (window) and converts returned ppp object to sf's POINT geometries;
    #1204 with help from Ege Rubak and Jakub Nowosad

  - sf_project() gains an option keep = TRUE to return Inf values for
    points not projectable; #1228

  - support vctrs methods for geometry list columns; this makes unnest
    work again (#1172); #1196 by Lionel Henry

  - st_as_sf.pq_geometry() converts binary geom columns from
    RPostgres::dbGetQuery; #1195

  - st_cast() can convert MULTICURVE to MULTILINESTRING; #1194

  - st_read() gains a parameter wkt_filter for spatially filtering the
    features to be read; #1192

  - st_area() and st_length() handle +to_meter argument in PROJ strings;
    #1170

  - add st_filter() generic for filtering on spatial features only;
    #1148

  - a new UBSAN error in wkb_read() was resolved; #1154, #1152

  - new method st_shift_longitude() to re-center data for a Pacific
    view. #1218

  - output of st_as_text() with MULTIPOINT has nested parentheses around
    points. E.g., MULTIPOINT ((0 0), (1 1)) instead of MULTIPOINT
    (0 0, 1 1); #1219, #1221

                 Changes in version 0.8-0 (2019-09-17)                  

  - fix tests for PROJ 6.2.0 not accepting +units=

  - fixes for tidyr 1.0-0 release; attempt to port nest.sf() and
    unnest.sf(); #1068, #1145

  - gdal_utils() better closes connections after use; #1143

  - st_write() gains a drivers options, to limit the drivers attempted;
    #1142

  - rather than replacing, st_write() and write_sf() append to an
    existing layer if update=TRUE; #1126

  - improve plotting of POSIXct and Date attributes (Date requiring
    classInt >= 0.4-2)

  - NULL geometries read by GDAL are returned as empty geometries; #1119

  - gdal_utils('rasterize', ...) accepts non-existing destinations,
    defined by e.g. resolution and extent options (see #1116 for an
    example), and overwrites if needed (see #1136 for an example)

  - add Dan Baston as contributor; #1120 and many others

  - in addition to NULL, st_sfc() also converts NA values into empty
    geometries; #1114.

  - st_join() is a generic

                 Changes in version 0.7-7 (2019-07-24)                  

  - plot() handles POSIXct values in legend

  - constructor functions like st_linestring() check and break on NA
    coordinates; #1101, #1102

                 Changes in version 0.7-6 (2019-07-05)                  

  - have examples of st_write write only to the temporary R session
    directory

                 Changes in version 0.7-5 (2019-07-03)                  

  - as(x, "Spatial") gives a proper error message on empty geometries;
    #1093

  - st_cast() takes care of empty polygons; #1094

  - st_nearest_* functions warn in case they are used with geographic
    coordinates; #1081

  - st_union() no longer segfaults on zero row sf objects; #1077

  - st_transform() no longer breaks on zero row sf objects; #1075

  - when PROJ >= 6.1.0 is available and sf comes with datum files (as is
    the case with statically linked Windows and OSX CRAN binaries),
    PROJ_LIB is no longer temporarily overwritten, but the PROJ C api is
    used to set the datum path; #1074, suggested by Jeroen Ooms

  - sf compiles against GDAL 3.x and PROJ 6.1.0, using the new proj.h
    interface; #1070

  - st_distance() returns NA for empty geometries, rather than 0; #1055

                 Changes in version 0.7-4 (2019-04-25)                  

  - add example on how voronoi polygons can be tied back to the points
    they contain; #1030

  - st_difference(x, y), with x an sfc with zero feature geometries,
    returns x; #1024

  - don't reset (base) plot device when add = TRUE

  - == and != return NA when one of the operands is an empty geometry;
    #1013

  - st_intersects() is a generic

  - drop requiring proj_api.h in favor of proj.h, this enables
    compatibility to PROJ 6.0.0 and GDAL 2.5.0-dev; #988

  - fix regression in binary predicates introduced in #855; #999
    reported by Barry Rowlingson

  - fix bug in gdal_utils util warper on certain GDAL/OS combinations;
    https://github.com/r-spatial/stars/issues/117

  - c.sfc() ignores the type (class) of empty sfc objects when choosing
    the result type; #985, #982

  - rename the default value for distance to "Euclidean", rather than
    "distance" in st_distance()

                 Changes in version 0.7-3 (2019-02-21)                  

  - add argument exact to st_sample(), defaulting to FALSE; #896

  - fixed n-ary st_difference() for cases where geometries are entirely
    contained in others; #975, by Jonathan Marshall

  - faster Ops.sfc(), added st_normalize(); #973 by Thomas Lin Pedersen

  - new grob constructor for sfc objects; #971 by Thomas Lin Pedersen;
    add Thomas as contributor

  - add group_split() and group_map() methods for sf objects
    (experimental); #969

  - make st_interpolate_aw() a generic;

  - argument col for plot of GEOMETRY sfc's is NA (open) for (multi)
    polygon geometries

                 Changes in version 0.7-2 (2018-12-20)                  

  - feature IDs are no longer returned as names on the geometry list
    column, but optionally returned by st_read as attribute column; #812

  - when plotting multiple attributes, plot.sf adds a (single, common)
    key if key.pos is set

  - precision can be specified in distance units; #901

  - support log-scale in color legend by setting logz to TRUE in plot.sf

  - st_intersects() etc. will prepare y when y is polygons and x is
    points; #885 by Dan Baston

  - st_write() (and write_sf()) returns its first argument, invisibly;
    #889

                 Changes in version 0.7-1 (2018-10-24)                  

  - fix bug that broke n-ary st_intersection() on platforms using clang;
    #867

                 Changes in version 0.7-0 (2018-10-17)                  

  - adds several interfaces to GDAL functions, meant to be used by
    package stars

  - st_read() receives a query argument that can run queries against OGR
    datasets; #834, by Barry Rowlingson and Michael Sumner

  - read_sf() no longer first creates tibbles from data.frames, but
    creates them directly; #853, db propagation by Etienne Racine

  - check difference between compile-time and run-time GEOS versions;
    #844

  - all GEOS routines are (more) robust against memory leaks, by using
    unique pointers; #822, #845, by Dan Baston

  - st_buffer() receives the buffer styles endCapStyle, joinStyle and
    mitreLimit; #833, #842 by Michael Sumner

                        Changes in version 0.6-4                        

  - st_area() is a generic; https://github.com/r-spatial/stars/issues/32

  - st_write() resolves ~ correctly; #456

  - read and write feature IDs as sfc list column names; #812

  - st_centroid() works for empty geometries, returning an empty point
    #769

  - add st_nearest_points(), to obtain the (LINESTRING connecting the)
    two nearest points for pairs of geometries; #788

  - add hexagonal tiling to st_make_grid()

  - add regular and hexagonal sampling to st_sample()

  - fixes for PROJ 5.0.1; #545

  - fixes for GDAL 2.3.0; #759

  - st_sample() supports regular sampling of LINESTRING; #725 by
    @statnmap

  - Support reading and writing of database Pool objects; #756

  - fix plotting of sf objects without attributes; #755

  - add reference to the R Journal article in CITATION

                 Changes in version 0.6-3 (2018-05-17)                  

  - move dependency RPostgreSQL from Imports: back to Suggests:

  - st_centroid.sf() and st_point_on_surface.sf also warn if attributes
    are not constant over geometries.

  - summarise() allows the user to define geometries for summaries;
    #714, by Kirill Mueller

  - plot.sf() emits a warning if col does not have length 1 or nrow(x),
    and requires pal (rather than col) to set a palette for factors.

  - plot.sf() provides control over legend keys using key.length and
    key.width, decrease default key length; #731

  - sgbp objects receive an as.data.frame method; #715

                 Changes in version 0.6-2 (2018-04-25)                  

  - GDAL read/write supports logical variables; #722

  - add st_crop() to simplify cropping objects with a rectangular area;
    #720

  - fix bug in [<- when columns are added to an sf object; #718

  - use dynamic registration of S3 methods, similar to how hms does
    this; #710 by Kirill Mueller

  - (partially) address writing GPKG to network drive, writing to temp
    file first; #628

  - add Kirill Mueller as contributor

  - st_make_grid() is faster; #708, by Dan Baston

  - st_read() and st_write() are generic, with methods for directly
    reading from and writing to database connections; st_read_db and
    st_write_db are deprecated; #558, thanks to Etienne Racine
    @etiennebr

  - Package RPostgreSQL moved from Suggests to Imports

  - restore compatibility with GDAL 2.0.x versions (which won't have
    gdal_utils); #686

  - read_sf() can also read tables without geometry; #684, by Andy
    Teucher

                 Changes in version 0.6-1 (2018-03-22)                  

  - method distinct() works; #669, #672

  - +, -, * and / for pairs of geometries (sfg, sfc) return geometric
    union, difference, intersection and symmetric difference,
    respectively.

  - st_cast() from MULTIPOLYGON to MULTILINESTRING should work properly;
    #660

  - all Rcpp interfaces needed by package stars have been moved into sf;
    pkg stars is R-only, and only sf needs linking to GDAL.

  - gdal_utils() interfaces the 9 gdal utils using the C++ API

  - improve resetting (base) plots; add reset = FALSE in a call to plot
    to enable adding to plots that have a legend

  - st_read() returns a data.frame when a table contains no geometries,
    rather than giving an error; it does emit a warning in this case.
    See
    https://stat.ethz.ch/pipermail/r-sig-geo/2018-February/026344.html

  - move pillar from Imports: to Suggests:

  - update to the new rwinlib distribution of gdal (adds JPG2000); #639

  - speed up computation of centroids for largest polygon; #623

  - add st_as_sfc.raw method

  - Bugfix: binary operations (st_intersection, st_difference, etc) no
    longer fail when operating on data frames of class "tbl_df" with
    common column names; #644

                 Changes in version 0.6-0 (2018-01-06)                  

  - add pillar to Imports: to provide method for printing WKT geometries
    in tibbles

  - st_as_text, and subsequently format and print, use argument digits
    (or options(digits = n)) to control the number of digits used for
    printing coordinates; default is options("digits"), which is
    typically 7.

  - st_is_within_distance works with geographic coordinates

  - st_cast from MULTIPOLYGON to MULTILINESTRING no longer changes the
    number of features/feature geometries, but conversion from
    MULTIPOLYGON to LINESTRING (typically) does; #596

  - st_distance for long/lat geographic coordinates uses lwgeom,
    accepting all geometry types; argument dist_fun is deprecated as a
    consequence, and distance calculations are different from those in
    sf versions 0.5-5 or earlier; #593

  - add package lwgeom to Suggests; st_area, st_length, st_distance,
    st_segmentize for long/lat CRS use package lwgeom instead of
    geosphere; #593

  - st_length returns zero for polygon-type geometries; #593

  - if present, add units of attribute to default plot title; #591

  - add unnest method, which depends on tidyr > 0.7-2; #570 PR by
    @karldw

  - add largest option to st_join to get largest intersection match
    only; #547, by @tiernanmartin

  - change default maximum number of feature to print to 10,
    controllable by options(sf_max_print); #556

  - add Hausdorff (and Frechet for those with GEOS 3.7.0) as options to
    st_distance; add par for densified versions

  - add st_snap, for snapping geometries to other geometries, within a
    tolerance

  - make st_wrap_dateline a generic, with methods for sf, sfc and sfg;
    #541

  - plot.sf and st_as_grob (used by ggplot2) are robust against
    misspecified ring directions (holes that have the same direction as
    the exterior rings), by using rule = "evenodd"; #540

  - functions depending on liblwgeom (st_make_valid, st_geohash,
    st_plit) have been moved to their own package,
    https://github.com/r-spatial/lwgeom; argument use_gdal of
    st_transform has been deprecated, instead one can use
    lwgeom::st_transform_proj; sf no longer tries to link to liblwgeom;
    #509, #537, #487

  - st_read, st_sf and st_sfc gain a parameter check_ring_dir (default:
    FALSE) that checks ring directions and corrects to: exterior counter
    clockwise, holes clockwise, when seen from above.

  - get rid of classInt::classIntervals warning if number of unique
    values is smaller than the number of breaks asked for

                 Changes in version 0.5-5 (2017-10-31)                  

  - have classInt in Imports:, to not break other package checks

  - add vignettes 5: plotting sf objects and 6: miscellaneous; #324

  - add (default) color key to plot.sf if single map is plotted,
    contributed by @hughjonesd; #528

  - st_as_sfc can read EWKT; #530

  - argument max.plot takes its default from options(sf_max.plot=n), if
    present; #516

  - plot.sf gets an arguments pal to specify a color palette function;
    #526

  - plot.sf gets arguments breaks and nbreaks; add support for
    classInt::classIntervals styles for finding class intervals (using
    breaks)

  - add st_as_sf methods for ppp, lpp and psp objects from spatstat.

  - allow for direct route to proj.4 ignoring GDAL (requiring
    liblwgeom); #509, #511

  - add print method for crs objects; #517

  - sf_extSoftVersion reveals whether GDAL was linked to GEOS; #510

  - better check input of st_polygon; #514

  - add st_node, similar to rgeos::gNode

  - support for reading OFTInteger64List fields; #508

  - sparse geometric binary predicate lists have a class, sgbp, and
    attributes region.id and predicate; #234, #524

  - prevent st_split from stopping the R session; #492

  - st_intersection, st_union and so on also print a message when used
    directly on long/lat coordinates; #496

  - add rep method for sfc objects

  - comparing two crs objects uses the GDAL function IsSame; #180

  - add st_collection_extract, which, given an object with geometries of
    type GEOMETRY or GEOMETRYCOLLECTION, returns an object consisting
    only of elements of the specified type; by Andy Teucher, #482

  - st_write exports GeoJSON with UTF-8 encoding on Windows; #444

  - move package methods from Imports: to Depends: ; #478

  - deal better with precision setting and propagation; #476

  - fix bug in st_layers in case layers have no geometry; #334

  - clarify argument envelope in st_voronoi; #474

  - change aggregate to make it return the same geometry as 'by',
    padding attributes with NA where needed; #453

                 Changes in version 0.5-4 (2017-08-28)                  

  - fix compatibility problems introduced by tidyr 0.7-0 using rlang
    magic

  - convert path names to UTF-8 in st_read, st_write and st_layers; #471

  - st_sfc converts NULL values into empty geometries, and correctly
    identifies empty POINTs; #466, #463

  - st_write abbreviates column names if driver is ESRI Shapefile; #464

  - add of_largest_polygon argument to st_centroid, to get the centroid
    of the largest polygon; #450

  - fix use of st_relate as join predicate for st_join; #454

  - fix bug where st_intersects with empty second argument would crash;
    #458

  - produce better WKT; #463

  - fix bug in st_cast.sf; #461, #462

  - change st_read SRS assignment logic; corrects reading projected
    geojson with gdal 2.2.0; #449

  - st_intersection etc. on tbl also return tbl; #448

  - [.sf preserves class, e.g. of tbl; #448

                 Changes in version 0.5-3 (2017-07-30)                  

  - support and propagate all Proj.4 +units=xx length units; #446

  - allow for arith ops on empty sfc objects

  - have st_graticule return an empty graticule object when argument
    datum is NA;

  - export as_Spatial, to make it easier for packages to convert sfc
    objects without importing sf

  - st_distance gains a parameter by_element to obtain pairwise
    distances; #437

  - add the ability to aggregate using a simple feature by argument;
    #429

  - make the op argument to [.sf work

  - speed up st_coordinates for POINT geometries; #433

  - fix performance regression for st_bbox; #418

  - correct bug in st_union, st_difference and st_sym_difference
    introduced in 0.5-2; #431

  - inform gdal about the CRS always through the proj4string, never
    through the epsg; see #424

  - properly deal with kilometre units; #424 (fixed by Karl Dunkle
    Werner)

  - add st_is_within_distance, only to return a sparse index matrix;
    #419

  - have st_graticule work with world2 (0,360); #421, #422, fixed by Ben
    Best

  - st_graticule to return graticules in native crs;
    https://github.com/tidyverse/ggplot2/issues/2200 (WIP)

  - st_graticule to support data in NA_crs_;
    https://github.com/tidyverse/ggplot2/issues/2199

  - fix bug when joining an sf-tibble with a tibble; #414

  - read gdal StringList, RealList, and IntegerList fields into a
    list-column; #416

                 Changes in version 0.5-2 (2017-07-12)                  

  - made ready for rwinlib/gdal2; #408

  - make [.sf for selections including NA values like x[c(1,NA,2)]; #403

  - add a [<- method for sfc objects; automatically replaces NULL with
    an empty geometry; #411

  - add st_point_on_surface() to return a point that is guaranteed to be
    on the surface (standard compliance)

  - read_sf returns an sf-tibble, an object of class c("sf", "tbl_df",
    "tbl", "data.frame")

  - work around for dplyr::filter not dispatching geometry column
    subsetting to sf::[.sfc

  - allow units object as dist argument to st_buffer; these must be
    convertable to arc_degree for geographic, and to a length unit for
    non-geographic data; #399

  - prevent gdal from crashing when trying to st_transform an empty
    geometry; #398

  - add st_as_sfc method for bbox, returning the bbox polygon; #377

  - strip file name extension from default layer name in st_write; #392

  - have st_sf replace NULL values in an sfc list-column with the
    appropriate empty geometry; #372

  - allow setting ndiscr through ggplot2::coords_sf to improve graticule
    plotting in geom_sf; #396

                 Changes in version 0.5-1 (2017-06-23)                  

  - add spatial indexes to most binary geometry operations; #394 and
    http://r-spatial.org/r/2017/06/22/spatial-index.html

  - drastically reduce memory footprint of st_intersection and similar;
    #394

  - support RSQLite 2.0 by providing an st_as_sfc method for list
    columns of class blob

  - drop dependency on dbplyr

                 Changes in version 0.5-0 (2017-06-15)                  

  - better handle empty/NULL geometries in shapefiles; #351

  - add unite_.sf method

  - deprecate FUN argument to st_join; #376

  - improve graticule tic label placement in ggplot2; #375 and
    https://github.com/tidyverse/ggplot2/issues/2119

  - improve configure logic to deal with libraries installed in custom
    locations; #335

  - fix bug where geom_sf wouldn't deal with Z and/or M geoms; #373

  - return more conveniently typed empty geoms; #372

  - fix subsetting with [ of sf using drop = TRUE, #370

  - in addition to m, allow rad units to st_segmentize

  - add example how to st_read GeoJSON from a string; #185

  - add separate_.sf method

  - add st_split to split geometries (only available if compiled against
    liblwgeom), #359

  - fix bug reading and writing dates (months 1 off): #358

  - [.sf and [.sfc also select on i when i is an sfg object, and accept
    a geometric predicate function with optional arguments; #352

  - on reading through GDAL, empty (NULL) geometries no longer result in
    an error; on creation, they no longer automatically give a GEOMETRY
    object; #351

  - on plotting with ggplot2::geom_sf, empty geometries no longer break;
    grid functions return nullGrob() for them; #351

  - arith operations on empty geometries no longer break or give
    warnings; #351

  - have st_as_sf.data.frame by default break on NA values in
    coordinates; #342

  - have st_join accept further arguments, to be passed on to the join
    function (e.g. a pattern for st_relate)

  - have WKB reader throw an error on (some) malformed inputs, and check
    for buffer bounds

                 Changes in version 0.4-3 (2017-05-15)                  

  - back-port do_union argument to dplyr <= 0.5.0, using lazyeval

  - all strings returned from OGR/GDAL get encoding set to UTF-8, making
    them work on non-UTF-8 platforms; #5

  - $.crs retrieves proj4string components, such as st_crs(4326)$datum
    in addition to epsg and proj4string

  - let st_geohash return geohash for (average) points (only when sf was
    linked to liblwgeom)

                 Changes in version 0.4-2 (2017-05-05)                  

  - summarise.sf always returns an sf object, also for global
    (non-grouped) summaries.

  - summarise.sf gains an argument do_union which determines whether to
    union the geometries for which a summary is given, or to st_combine
    them (not resolving boundaries); #331

  - rename argument union of aggregate.sf into do_union, for consistency
    with summarise; #331

  - add a nest_ method for sf objects

  - st_relate gets a pattern parameter, same as rgeos::gRelate; add
    examples to get rook and queen neighbour lists using this; #234

  - support for direct reading of spatialite and sqlite geometry wkb
    blobs

  - build proper support for cbind and rbind methods for sf, which work
    (as documented) when all arguments are of class sf; dplyr::bind_cols
    or st_sf(data.frame(sf, df)) work for binding data.frames to an sf
    object.

  - st_segmentize() and st_line_sample() accept units arguments

  - document problem reading shapefiles from USB drives on OSX; #252

  - improve docs of st_is_valid and st_make_valid; #296

  - coercing sf to data.frame works better; #298

  - st_line_sample gains argument sample to specify the points t.b.
    sampled; #299 #300 thanks to @joethorley

  - add compatibility to upcoming dplyr 0.6.0; #304 #42

  - write GDAL fields by name, not by number, fixing a KML problem #308

  - st_write gains arguments delete_layer and delete_dsn to allow
    overwrite capability #307 #274

  - write_sf defaults to delete_layer=TRUE, silently overwriting layers
    if they're already present

  - compatibility with GDAL 2.2beta0; #303; #309

  - replace st_write_db with a version that is fast for large datasets
    (#285), thanks to Josh London

  - take out more memory leaking examples in tests

  - the aggregate method for sf objects assumes the by argument to be
    identical to that of stats::aggregate

  - st_wrap_dateline wraps (cuts up) geometries crossing the
    antimeridian, such that they no longer cross it.

                 Changes in version 0.4-1 (2017-03-28)                  

  - restore 3.3.0 and c++11 requirement

  - st_read respects time that is read as UTC

  - st_write writes time always as UTC, since GDAL does not have a
    mechanism to define local timezones other than "unknown" or "local"

  - st_length works for POINT and MULTIPOINT (returning 0); POLYGON and
    MULTIPOLYGON are converted to MULTILINESTRING before computing
    length, thus giving polygon perimeter (#268)

  - st_write has update depend on driver; for databases, the default is
    TRUE, otherwise FALSE (it refers to update of the database, and not
    to overwriting the table in the database, this will by default not
    succeed); #274

  - st_read supports reading objects with multiple geometry columns #257
    #255

  - support writing (exporting) objects with non-standard columns, such
    as units or POSIXlt #264

  - catch dependencies on GEOS 3.3.5 (hence no 0.4-0 CRAN binary for
    MacOSX) #260

                 Changes in version 0.4-0 (2017-03-21)                  

  - have st_is_valid catch corrupt geometries too, returning NA in that
    case (requiring GEOS 3.5.0)

  - add st_make_valid, only available when sf was linked to liblwgeom

  - add st_coordinates method, returning coordinates matrix with indexes

  - remove unlist.sfg

  - add as.matrix.sfg; have as.matrix.sfg add indexes to coordinates

  - add st_bind_cols method

  - improve handling features that can't be projected

  - support uniform sampling over polygons on the sphere

  - add st_sample, for sampling points on multipoints, linestrings, or
    polygons

  - add c method for sfc objects

  - import and export magrittr::%>%

  - support ggplot'ing geometrycollections

  - drop C++11 requirement, allowing build for older R versions

  - add st_proj_info, modelled after rgdal::projInfo

  - overwriting datasets with st_write() is no longer allowed;
    update=TRUE appends to them, permitted the driver supports
    appending.

  - st_write gains an argument, update, which when TRUE will try to
    append to existing datasets (#204)

  - added list of corresponding function for migration from sp, rgdal
    and rgeos to sf at https://github.com/edzer/sfr/wiki/migrating

  - remove deprecated st_list

  - rename st_makegrid to st_make_grid, and st_linemerge to
    st_line_merge

  - add NEWS.md file (#207)

  - faster conversion of data.frame into POINT sf object, using st_as_sf
    (Michael Sumner)

  - rbind method for sf objects keeps coordinate reference system

                 Changes in version 0.3-4 (2017-02-06)                  

  - add st_contains_properly spatial predicate

  - GEOS functions (geometry operations) accept XYZ geometries (and
    ignore Z)

  - make prepared = TRUE the default for all geometry binary operations

                 Changes in version 0.3-2 (2017-02-04)                  

  - add user interrupt checks in all GEOS geometry operations

  - make st_graticule do something useful for polar projections

  - make st_graticule return NA labels when labels are useless

  - add merge.sf methods to merge sf object and data.frame (#193)

  - add st_join for table joins based on (user-defined) spatial
    predicates

  - add dplyr-style non-spatial joins for sf objects (left_join,
    full_join etc.) (#193)

  - allow for multiple non-gathered variables (#196)

  - add missing meridian to st_graticule (#198)

                 Changes in version 0.3-1 (2017-01-31)                  

  - add merge method (#193)

  - st_graticule for laea (#198)

  - allow st_buffer with feature-dependent buffer distance (#197)

  - have spread return an sf object (#196)

  - clarify overwrite = TRUE in write docs

  - fix st_as_sf.map (#194)

  - add prepared arg to spatial binary predicates, to speed up large
    intersections

  - add st_voronoi interface (requires that lib GEOS >= 3.5.0)

  - add st_as_sf methods for map objects (library maps)

  - add RStudio project file

  - have st_bbox return a bbox object which has an st_crs method

  - rename st_drop_zm into st_zm, for general more handling of Z and M

  - allow for 3D coordinates returned, when +proj=geocent (#172; #103)

  - fix NA_integer_ handling in shapefiles I/O (#184)

  - add and fix st_agr API, to set and get attribute-to-geometry
    relationships

                 Changes in version 0.2-8 (2017-01-05)                  
