R: геопространственные библиотеки

в 8:24, , рубрики: R, Блог компании Инфопульс Украина, геоданные

Ввод/вывод, изменение и визуализация геопространственных данных — задачи, общие для многих дисциплин. Поэтому многие заинтересованы в создании хороших инструментов для их решения. Набор инструментов для работы с пространственными данными постоянно растет. Мы поверхностно рассмотрим каждый из них. Подробности можно получить по ссылкам на cran или github.

Мы не пытаемся заменить уже существующие в R геопространственные библиотеки — скорее, дополнить и создать небольшие инструменты, позволяющие легко воспользоваться только необходимыми вам функциями.

geojsonio

cran github

geojsonio — инструмент для конвертации данных из и в формат geojson. Конвертируйте данные в/из GeoJSON из различных классов R: векторов, списков, пакетов данных (data frame), векторных файлов и пространственных классов.

Например:

library("geojsonio")
geojson_json(c(-99.74, 32.45), pretty = TRUE)

#> {
#>   "type": "FeatureCollection",
#>   "features": [
#>     {
#>       "type": "Feature",
#>       "geometry": {
#>         "type": "Point",
#>         "coordinates": [-99.74, 32.45]
#>       },
#>       "properties": {}
#>     }
#>   ]
#> }

wellknown

cran github

wellknown — инструмент для конвертации в и из текстовых данных в формате well-known. Конвертируйте WKT/WKB в GeoJSON и обратно. Включены функции конвертации между GeoJSON и WKT/WKB, создания GeoJSON-свойств, создания WKT/WKB из объектов R (например, списков, пакетов данных (data frame), векторов), сборки WKT.

Например:

library("wellknown")
point(data.frame(lon = -116.4, lat = 45.2))

#> [1] "POINT (-116.4000000000000057 45.2000000000000028)"

gistr

cran github

gistr — это не геопространственный инструмент сам по себе, но он крайне полезен для совместного использования карт. Скажем, с помощью всего нескольких строчек можно поделиться интерактивной картой на GitHub.

Например, с помощью geojsonio, описанного выше:

library("gistr")
cat(geojson_json(us_cities[1:100,], lat = 'lat', lon = 'long'), file = "map.geojson")
gist_create("map.geojson")

R: геопространственные библиотеки - 1

lawn

cran github

R-клиент для turf.js (расширенный геопространственный анализ для браузеров и модулей).

В lawn есть функция для каждого метода в turf.js. А также:

  • несколько функций-оберток для модульного пакета geojson-random (создание случайных geojson-свойств);
  • вспомогательная функция view() для легкой визуализации результатов вызова lawn-функций.

Например:

library("lawn")
lawn_hex_grid(c(-96,31,-84,40), 50, 'miles') %>% view

R: геопространственные библиотеки - 2

geoaxe

cran github

R-клиент для разбиения геопространственных объектов на части.

Например:

library("geoaxe")
library("rgeos")
wkt <- "POLYGON((-180 -20, -140 55, 10 0, -140 -60, -180 -20))"
poly <- rgeos::readWKT(wkt)
polys <- chop(x = poly)
plot(poly, lwd = 6, mar = c(0, 0, 0, 0))

R: геопространственные библиотеки - 3

И разделенный на части многогранник:

plot(polys, add = TRUE, mar = c(0, 0, 0, 0))

R: геопространственные библиотеки - 4

proj

cran github

R-клиент для proj4js, Javascript-библиотеки для проекций. proj еще нет на CRAN.

getlandsat

cran github

R-клиент для получения «ландсат»-данных из публичных хранилищ AWS. getlandsat еще нет на CRAN.

Например:

library("getlandsat")
head(lsat_scenes())

#>                entityId     acquisitionDate cloudCover processingLevel
#> 1 LC80101172015002LGN00 2015-01-02 15:49:05      80.81            L1GT
#> 2 LC80260392015002LGN00 2015-01-02 16:56:51      90.84            L1GT
#> 3 LC82270742015002LGN00 2015-01-02 13:53:02      83.44            L1GT
#> 4 LC82270732015002LGN00 2015-01-02 13:52:38      52.29             L1T
#> 5 LC82270622015002LGN00 2015-01-02 13:48:14      38.85             L1T
#> 6 LC82111152015002LGN00 2015-01-02 12:30:31      22.93            L1GT
#>   path row   min_lat    min_lon   max_lat    max_lon
#> 1   10 117 -79.09923 -139.66082 -77.75440 -125.09297
#> 2   26  39  29.23106  -97.48576  31.36421  -95.16029
#> 3  227  74 -21.28598  -59.27736 -19.17398  -57.07423
#> 4  227  73 -19.84365  -58.93258 -17.73324  -56.74692
#> 5  227  62  -3.95294  -55.38896  -1.84491  -53.32906
#> 6  211 115 -78.54179  -79.36148 -75.51003  -69.81645
#>                                                                                 download_url
#> 1 https://s3-us-west-2.amazonaws.com/landsat-pds/L8/010/117/LC80101172015002LGN00/index.html
#> 2 https://s3-us-west-2.amazonaws.com/landsat-pds/L8/026/039/LC80260392015002LGN00/index.html
#> 3 https://s3-us-west-2.amazonaws.com/landsat-pds/L8/227/074/LC82270742015002LGN00/index.html
#> 4 https://s3-us-west-2.amazonaws.com/landsat-pds/L8/227/073/LC82270732015002LGN00/index.html
#> 5 https://s3-us-west-2.amazonaws.com/landsat-pds/L8/227/062/LC82270622015002LGN00/index.html
#> 6 https://s3-us-west-2.amazonaws.com/landsat-pds/L8/211/115/LC82111152015002LGN00/index.html

siftgeojson

cran github

Делайте срезы GeoJSON так же легко, как получилось бы с пакетом данных (data frame). Это надстройка над jqr, R-обертки для jq, обработчика JSON.

library("siftgeojson")
# данные для примера
file <- system.file("examples", "zillow_or.geojson", package = "siftgeojson")
json <- paste0(readLines(file), collapse = "")
# выбрать только округ Малтнома (Multnomah), проверить, что вернулся только округ Малтнома (Multnomah)
sifter(json, COUNTY == Multnomah) %>% jqr::index() %>% jqr::dotstr(properties.COUNTY)

#> [
#>     "Multnomah",
#>     "Multnomah",
#>     "Multnomah",
#>     "Multnomah",
#>     "Multnomah",
#>     "Multnomah",
#>     "Multnomah",
#>     "Multnomah",
#>     "Multnomah",
...

plotly

cran github

plotly — R-клиент для Plotly — веб-интерфейса и API для создания интерактивной графики.

library("plotly")
plot_ly(iris, x = Petal.Length, y = Petal.Width,
        color = Species, mode = "markers")

R: геопространственные библиотеки - 5

Maptools Task View

github

Джефф Холлистер создал maptools task view для организации работы с картами в R: пакетов, источников данных, проекций, статичных и интерактивных карт, преобразований данных и т.д.

Автор: Инфопульс Украина

Источник

Поделиться новостью

* - обязательные к заполнению поля