All Projects → ropensci → Wellknown

ropensci / Wellknown

Licence: other
WKT <-> GeoJSON

Programming Languages

r
7636 projects

Projects that are alternatives of or similar to Wellknown

geojson
GeoJSON classes for R
Stars: ✭ 32 (+113.33%)
Mutual labels:  geojson, geospatial, spatial, r-package
Lawn
⛔ ARCHIVED ⛔ turf.js R client
Stars: ✭ 57 (+280%)
Mutual labels:  geospatial, geojson, r-package, rstats
Geojsonio
Convert many data formats to & from GeoJSON & TopoJSON
Stars: ✭ 132 (+780%)
Mutual labels:  geojson, r-package, rstats
NLMR
📦 R package to simulate neutral landscape models 🏔
Stars: ✭ 57 (+280%)
Mutual labels:  spatial, rstats, r-package
de9im
DE-9IM spatial predicate library implemented in Javascript.
Stars: ✭ 22 (+46.67%)
Mutual labels:  geojson, geospatial, spatial
Stplanr
Sustainable transport planning with R
Stars: ✭ 352 (+2246.67%)
Mutual labels:  spatial, r-package, rstats
Vitae
R Markdown Résumés and CVs
Stars: ✭ 627 (+4080%)
Mutual labels:  r-package, rstats
Egretci
A bootstrap method for estimating uncertainty of water quality trends
Stars: ✭ 5 (-66.67%)
Mutual labels:  r-package, rstats
Tidymv
Tidy Model Visualisation for Generalised Additive Models
Stars: ✭ 25 (+66.67%)
Mutual labels:  r-package, rstats
Chr
🔤 Lightweight R package for manipulating [string] characters
Stars: ✭ 18 (+20%)
Mutual labels:  r-package, rstats
Timevis
📅 Create interactive timeline visualizations in R
Stars: ✭ 470 (+3033.33%)
Mutual labels:  r-package, rstats
Icpsrdata
Reproducible data downloads from the ICPSR data archive
Stars: ✭ 7 (-53.33%)
Mutual labels:  r-package, rstats
Rtimicropem
😷 R Package for the Analysis of RTI MicroPEM Output Files 😷
Stars: ✭ 9 (-40%)
Mutual labels:  r-package, rstats
Shinyjs
💡 Easily improve the user experience of your Shiny apps in seconds
Stars: ✭ 566 (+3673.33%)
Mutual labels:  r-package, rstats
Magellan
Geo Spatial Data Analytics on Spark
Stars: ✭ 507 (+3280%)
Mutual labels:  geospatial, geojson
Proj
⛔️ [DEPRECATED] R wrapper for proj4js
Stars: ✭ 5 (-66.67%)
Mutual labels:  r-package, rstats
Koop
🔮 Transform, query, and download geospatial data on the web.
Stars: ✭ 505 (+3266.67%)
Mutual labels:  geojson, spatial
Skimr
A frictionless, pipeable approach to dealing with summary statistics
Stars: ✭ 889 (+5826.67%)
Mutual labels:  r-package, rstats
Ieeer
Search IEEE publications in R
Stars: ✭ 12 (-20%)
Mutual labels:  r-package, rstats
Restez
😴 📂 Create and Query a Local Copy of GenBank in R
Stars: ✭ 22 (+46.67%)
Mutual labels:  r-package, rstats

wellknown

cran checks Build Status Build status codecov.io rstudio mirror downloads cran version

wellknown - convert WKT to GeoJSON and vice versa.

Inspiration partly comes from Python's geomet/geomet - and the name from Javascript's wellknown (it's a good name).

Different interfaces

WKT from R stuctures

There's a family of functions that make it easy to go from familiar R objects like lists and data.frames to WKT, including:

  • point() - make a point, e.g., POINT (-116 45)
  • multipoint() - make a multipoint, e.g., MULTIPOINT ((100 3), (101 2))
  • linestring() - make a linestring, e.g., LINESTRING (100 0, 101 1)
  • polygon() - make a polygon, e.g., POLYGON ((100 0), (101 0), (101 1), (100 0))
  • multipolygon() - make a multipolygon, e.g., MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))

The above currently accept (depending on the fxn) numeric, list, and data.frame (and character for special case of EMPTY WKT objects).

Geojson to WKT and vice versa

geojson2wkt() and wkt2geojson() cover a subset of the various formats available:

  • Point
  • MultiPoint
  • Polygon
  • MultiPolygon
  • LineString
  • MultilineString
  • Geometrycollection

Geojson to WKT

geojson2wkt() converts any geojson as a list to a WKT string (the same format )

WKT to Geojson

wkt2geojson() converts any WKT string into geojson as a list. This list format for geojson can be used downstream e.g., in the leaflet package.

WKT to WKB, and vice versa

wkt_wkb() converts WKT to WKB, while wkb_wkt() converts WKB to WKT

Install

Stable version

install.packages("wellknown")

Dev version

install.packages("devtools")
devtools::install_github("ropensci/wellknown")
library("wellknown")

GeoJSON to WKT

Point

point <- list(Point = c(116.4, 45.2, 11.1))
geojson2wkt(point)
#> [1] "POINT Z(116.4000000000000057  45.2000000000000028  11.0999999999999996)"

Multipoint

mp <- list(
  MultiPoint = matrix(c(100, 101, 3.14, 3.101, 2.1, 2.18), 
    ncol = 2)
)
geojson2wkt(mp)
#> [1] "MULTIPOINT ((100.0000000000000000 3.1010000000000000), (101.0000000000000000 2.1000000000000001), (3.1400000000000001 2.1800000000000002))"

LineString

st <- list(
  LineString = matrix(c(0.0, 2.0, 4.0, 5.0,
                         0.0, 1.0, 2.0, 4.0), ncol = 2)
)
geojson2wkt(st, fmt=0)
#> [1] "LINESTRING (0 0, 2 1, 4 2, 5 4)"

Multilinestring

multist <- list(
  MultiLineString = list(
   matrix(c(0, -2, -4, -1, -3, -5), ncol = 2),
   matrix(c(1.66, 10.9999, 10.9, 0, -31.5, 3.0, 1.1, 0), ncol = 2)
 )
)
geojson2wkt(multist)
#> [1] "MULTILINESTRING ((0.0000000000000000 -1.0000000000000000, -2.0000000000000000 -3.0000000000000000, -4.0000000000000000 -5.0000000000000000), (1.6599999999999999 -31.5000000000000000, 10.9999000000000002 3.0000000000000000, 10.9000000000000004 1.1000000000000001, 0.0000000000000000 0.0000000000000000))"

Polygon

poly <- list(
  Polygon = list(
    matrix(c(100.001, 101.1, 101.001, 100.001, 0.001, 0.001, 1.001, 0.001),
      ncol = 2),
    matrix(c(100.201, 100.801, 100.801, 100.201, 0.201, 0.201, 0.801, 0.201),
      ncol = 2)
  )
)
geojson2wkt(poly)
#> [1] "POLYGON ((100.0010000000000048 0.0010000000000000, 101.0999999999999943 0.0010000000000000, 101.0010000000000048 1.0009999999999999, 100.0010000000000048 0.0010000000000000), (100.2009999999999934 0.2010000000000000, 100.8010000000000019 0.2010000000000000, 100.8010000000000019 0.8010000000000000, 100.2009999999999934 0.2010000000000000))"

Multipolygon

mpoly <- list(
  MultiPolygon = list(
    list(
      matrix(c(100, 101, 101, 100, 0.001, 0.001, 1.001, 0.001), ncol = 2),
      matrix(c(100.2, 100.8, 100.8, 100.2, 0.2, 0.2, 0.8, 0.2), ncol = 2)
    ),
    list(
      matrix(c(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 1.0), ncol = 3),
      matrix(c(9.0, 10.0, 11.0, 12.0, 1.0, 2.0, 3.0, 4.0, 9.0), ncol = 3)
    )
  )
)
geojson2wkt(mpoly, fmt=1)
#> [1] "MULTIPOLYGON Z(((100.000 0.001 0.000, 101.000 0.001 0.000, 101.000 1.001 0.000, 100.000 0.001 0.000), (100.2 0.2 0.0, 100.8 0.2 0.0, 100.8 0.8 0.0, 100.2 0.2 0.0)), ((1.0 4.0 7.0, 2.0 5.0 8.0, 3.0 6.0 1.0), (9.0 12.0 3.0, 10.0 1.0 4.0, 11.0 2.0 9.0)))"

GeometryCollection

gmcoll <- list(
 GeometryCollection = list(
   list(type = 'Point', coordinates = c(0.0, 1.0)),
   list(type = 'LineString', coordinates = matrix(c(0.0, 2.0, 4.0, 5.0,
                           0.0, 1.0, 2.0, 4.0),
                           ncol = 2)),
   list(type = 'Polygon', coordinates = list(
     matrix(c(100.001, 101.1, 101.001, 100.001, 0.001, 0.001, 1.001, 0.001),
       ncol = 2),
     matrix(c(100.201, 100.801, 100.801, 100.201, 0.201, 0.201, 0.801, 0.201),
       ncol = 2)
  ))
 )
)
geojson2wkt(gmcoll, fmt=0)
#> [1] "GEOMETRYCOLLECTION (POINT (0 1), LINESTRING (0 0, 2 1, 4 2, 5 4), POLYGON ((100.001 0.001, 101.100 0.001, 101.001 1.001, 100.001 0.001), (100.201 0.201, 100.801 0.201, 100.801 0.801, 100.201 0.201)))"

Convert json or character objects

You can convert directly from an object of class json, which is output from jsonlite::toJSON().

library("jsonlite")
(json <- toJSON(list(Point = c(-105, 39)), auto_unbox = TRUE))
#> {"Point":[-105,39]}
geojson2wkt(json)
#> [1] "POINT (-105   39)"

And you can convert from a geojson character string:

str <- '{"type":"LineString","coordinates":[[0,0,10],[2,1,20],[4,2,30],[5,4,40]]}'
geojson2wkt(str)
#> [1] "LINESTRING Z(0 0 10, 2 1 20, 4 2 30, 5 4 40)"

WKT to GeoJSON

Point

As a Feature

str <- "POINT (-116.4000000000000057 45.2000000000000028)"
wkt2geojson(str)
#> $type
#> [1] "Feature"
#> 
#> $geometry
#> $geometry$type
#> [1] "Point"
#> 
#> $geometry$coordinates
#> [1] -116.4   45.2
#> 
...

Not Feature

wkt2geojson(str, feature=FALSE)
#> $type
#> [1] "Point"
#> 
#> $coordinates
#> [1] -116.4   45.2
#> 
#> attr(,"class")
#> [1] "geojson"

Multipoint

str <- 'MULTIPOINT ((100.000 3.101), (101.000 2.100), (3.140 2.180))'
wkt2geojson(str, feature=FALSE)
#> $type
#> [1] "MultiPoint"
#> 
#> $coordinates
#>        [,1]  [,2]
#> [1,] 100.00 3.101
#> [2,] 101.00 2.100
#> [3,]   3.14 2.180
#> 
#> attr(,"class")
...

Polygon

str <- "POLYGON ((100 0.1, 101.1 0.3, 101 0.5, 100 0.1), (103.2 0.2, 104.8 0.2, 100.8 0.8, 103.2 0.2))"
wkt2geojson(str, feature=FALSE)
#> $type
#> [1] "Polygon"
#> 
#> $coordinates
#> $coordinates[[1]]
#>       [,1] [,2]
#> [1,] 100.0  0.1
#> [2,] 101.1  0.3
#> [3,] 101.0  0.5
#> [4,] 100.0  0.1
...

MultiPolygon

str <- "MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),
    ((20 35, 45 20, 30 5, 10 10, 10 30, 20 35), (30 20, 20 25, 20 15, 30 20)))"
wkt2geojson(str, feature=FALSE)
#> $type
#> [1] "MultiPolygon"
#> 
#> $coordinates
#> $coordinates[[1]]
#> $coordinates[[1]][[1]]
#>      [,1] [,2]
#> [1,]   40   40
#> [2,]   20   45
#> [3,]   45   30
...

Linestring

wkt2geojson("LINESTRING (0 -1, -2 -3, -4 5)", feature=FALSE)
#> $type
#> [1] "LineString"
#> 
#> $coordinates
#>      [,1] [,2]
#> [1,]    0   -1
#> [2,]   -2   -3
#> [3,]   -4    5
#> 
#> attr(,"class")
...

lint WKT

lint("POINT (1 2)")
#> [1] TRUE
lint("LINESTRING EMPTY")
#> [1] TRUE
lint("MULTIPOINT ((1 2), (3 4), (-10 100))")
#> [1] TRUE
lint("POLYGON((20.3 28.6, 20.3 19.6, 8.5 19.6, 8.5 28.6, 20.3 28.6))")
#> [1] TRUE
lint("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")
#> [1] TRUE
lint("POINT (1 2 3 4 5)")
#> [1] FALSE
lint("LINESTRING (100)")
#> [1] FALSE
lint("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, a b, 10 20, 5 10, 15 5)))")
#> [1] FALSE

WKT <--> WKB

WKT to WKB

## point
wkt_wkb("POINT (-116.4 45.2)")
#>  [1] 01 01 00 00 00 9a 99 99 99 99 19 5d c0 9a 99 99 99 99 99 46 40

## polygon
wkt_wkb("POLYGON ((100.0 0.0, 101.1 0.0, 101.0 1.0, 100.0 0.0))")
#>  [1] 01 03 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00 00 00 59 40 00 00
#> [24] 00 00 00 00 00 00 66 66 66 66 66 46 59 40 00 00 00 00 00 00 00 00 00
#> [47] 00 00 00 00 40 59 40 00 00 00 00 00 00 f0 3f 00 00 00 00 00 00 59 40
#> [70] 00 00 00 00 00 00 00 00

WKB to WKT

## point
(x <- wkt_wkb("POINT (-116.4 45.2)"))
#>  [1] 01 01 00 00 00 9a 99 99 99 99 19 5d c0 9a 99 99 99 99 99 46 40
wkb_wkt(x)
#> [1] "POINT(-116.4 45.2)"

## polygon
(x <- wkt_wkb("POLYGON ((100.0 0.0, 101.1 0.0, 101.0 1.0, 100.0 0.0))"))
#>  [1] 01 03 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00 00 00 59 40 00 00
#> [24] 00 00 00 00 00 00 66 66 66 66 66 46 59 40 00 00 00 00 00 00 00 00 00
#> [47] 00 00 00 00 40 59 40 00 00 00 00 00 00 f0 3f 00 00 00 00 00 00 59 40
#> [70] 00 00 00 00 00 00 00 00
wkb_wkt(x)
#> [1] "POLYGON((100 0,101.1 0,101 1,100 0))"

Meta

  • Please report any issues or bugs.
  • License: MIT
  • Get citation information for wellknown in R doing citation(package = 'wellknown')
  • Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

ropensci_footer

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].