Simple Features for R

Support for simple features, a standardized way to encode spatial vector data. Binds to 'GDAL' for reading and writing data, to 'GEOS' for geometrical operations, and to 'PROJ' for projection conversions and datum transformations.


version 0.6-0

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

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

  • st_is_within_distance now 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 now (typically) does; #596

  • st_distance for long/lat geographic coordinates now 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 now use functions from package lwgeom instead of geosphere; #593

  • st_length now 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 now 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,; argument use_gdal of st_transform has been deprecated, instead one can now use lwgeom::st_transform_proj; sf now 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

version 0.5-5

  • 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 now 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 now 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 now have a class, sgbp, and attributes and predicate; #234, #524

  • prevent st_split from stopping the R session; #492

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

  • add rep method for sfc objects

  • comparing two crs objects now 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

version 0.5-4

  • 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 now also return tbl; #448

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

version 0.5-3

  • 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 easer 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; (WIP)

  • st_graticule to support data in NA_crs_;

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

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

version 0.5-2

  • 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 function to return a point that is guaranteed to be on the surface (standard compliance)

  • read_sf now 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

version 0.5-1

  • add spatial indexes to most binary geometry operations; #394 and

  • 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

version 0.5-0

  • 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

  • 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 now 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 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

version 0.4-3

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

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

  • $.crs now 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)

version 0.4-2

  • summarise.sf now 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.

  • units support for function arguments of st_segmentize and st_line_sample

  • 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 now 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 now 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.

version 0.4-1

  • restore 3.3.0 and c++11 requirement

  • st_read now respects time that is read as UTC

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

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

  • st_write now has update depend on driver; now, 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

version 0.4-0

  • 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

  • remove deprecated st_list

  • rename st_makegrid to st_make_grid, and st_linemerge to st_line_merge

  • add file (#207)

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

  • rbind method for sf objects now keeps coordinate reference system

version 0.3-4, Feb 6, 2017

  • add st_contains_properly spatial predicate

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

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

version 0.3-2, Feb 4, 2017

  • 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)

version 0.3-1, Jan 31, 2017

  • 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 (#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

version 0.2-8, Jan 5, 2017

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.6-3 by Edzer Pebesma, 4 months ago

Report a bug at

Browse source code at

Authors: Edzer Pebesma [aut, cre] (<>>), Roger Bivand [ctb] (<>>), Etienne Racine [ctb], Michael Sumner [ctb], Ian Cook [ctb], Tim Keitt [ctb], Robin Lovelace [ctb], Hadley Wickham [ctb], Jeroen Ooms [ctb] (<>>), Kirill Müller [ctb]

Documentation:   PDF Manual  

Task views: Analysis of Spatial Data, Handling and Analyzing Spatio-Temporal Data

GPL-2 | MIT + file LICENSE license

Imports utils, stats, tools, graphics, grDevices, grid, Rcpp, DBI, units, classInt, magrittr

Depends on methods

Suggests lwgeom, maps, rgdal, rgeos, sp, raster, spatstat, tmap, maptools, RSQLite, tibble, pillar, rlang, dplyr, tidyr, RPostgreSQL, RPostgres, odbc, tidyselect, ggplot2, mapview, testthat, knitr, covr, microbenchmark, rmarkdown

Linking to Rcpp

System requirements: GDAL (>= 2.0.1), GEOS (>= 3.4.0), PROJ.4 (>= 4.8.0)

Imported by EmissV, FedData, GWSDAT, LAGOSNE, MODIS, NLMR, NipponMap, Orcs, RCzechia, RQGIS, amt, bcmaps, brazilmaps, btb, cartogram, cartography, cdcfluview, concaveman, crawl, cyclestreets, eixport, eurostat, fingertipscharts, geogrid, geojsonio, ggspatial, hydrolinks, jpmesh, jpndistrict, kokudosuuchi, landsepi, linemap, link2GI, lwgeom, mapedit, mapsapi, mapview, openSTARS, ows4R, parlitools, qualmap, quickmapr, reproducible, rgeopat2, rlas, rmapshaper, rmapzen, rnaturalearth, rpostgisLT, sabre, sfdct, smoothr, spatialEco, stplanr, tidyRSS, tidycensus, tidytransit, tigris, tmap, tmaptools, trigpoints, uavRmp, vein, velox, wunderscraper.

Depended on by nngeo, stars, statesRcontiguous, tilegramsR.

Suggested by DeclareDesign, GSODR, MODIStsp, NetLogoR, SpaDES.core, USAboundaries, adklakedata, cancensus, echor, fasterize, geometa, ggformula, ggiraph, ggplot2, googlePolylines, ipumsr, leaflet, lutz, mapdeck, mlr, mudata2, nlaR, opensensmapr, osmdata, plotly, raster, rcartocolor, spData, spbabel, spdep, swmmr, tabularaster, tricolore.

See at CRAN