Автоматизация поисковых запросов на R

Язык для статистического моделирования R (S-plus) широко распространен при решении научных и прикладных задач анализа данных.

За время своего более 20-ти летнего существования, среда статистичекого моделирования R обзавелась огромной экосистемой различных проблемно-ориентированных пакетов, позволяющих автоматизировать процесс решения самых разнообразных научных и приклданых задач, связанных с обработкой данных.

Выполняемый код в приводимом документе содержится в блоках, имеющих вид In[xxx]; его можно выполнить с использованием интерпретатора R, либо интерактивном режиме, либо предварительно сохранив в файл R-скрипта -- текстовой файл с расширением .r.

Данный документ создан при помощи Jupyter и IRkernel.

Подготовка вычислительной среды

Автоматизация поисковых запросов в среде R предполагает:

  • Формирование HTTP-запроса к серверу, согласно HTTP-API;
  • Преобразование полученного JSON-ответа в удобный в среде R вид (например, DataFrame-объект);

Для решения этих двух задач в экосистеме R имеется большое число пакетов. Приводимый далее код предполагает, что в вычислительной среде установлен пакет jsonlite

In [1]:
library(jsonlite)
In [2]:
data<-fromJSON('http://botsad.ru/hitem/json/?collectedby=Пименова')
In [3]:
data$data
species_authorshipupdatedcollectorsacronymspecies_statussignificancegpsbasedspecies_epithetcountryidentification_finisheditemcodeadditionalscollection_finishedbranchshort_notelatitudegenusfieldidregiondetails
(Spenn.) Fée 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE braunii Russia 141722 NULL 43.06703 Polystichum Приморский край г. Ливадийская (Фалаза), кедрово-широколиственный лес
Hara 2017-06-13 Пименова Е.А., Калинкина В.А. VBGI From plantlist TRUE iwarenge Russia 141647 NULL 42.89162 Orostachys Приморский край Залив Восток, база "Восток", мыс Пашинникова, скалы на берегу моря
Chaix 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE alpinoarticulatus Russia 2015-04-01 141725 NULL 45.82908 Juncus Приморский край с. Амгу, близ устья р. Амгу
Willd. ex Schult. & Schult.f. 2017-06-13 Пименова Е.А., Бондарчук С.Н., Губина Я.С. VBGI From plantlist TRUE splendens Russia 2015-04-01 141566 NULL 45.89254 Allium Приморский край г. Туман, щебнистая осыпь в подгольцовом поясе
(Regel) Sojak 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE maackianum Russia 140233 NULL 42.45782 Truellum Приморский край оз. Лотос, на сплавине
(Regel) Sojak 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE maackianum Russia 140234 NULL 42.45782 Truellum Приморский край оз. Лотос, на сплавине
(Regel) Sojak 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE maackianum Russia 140275 NULL 42.45782 Truellum Приморский край оз. Лотос, на сплавине
(Maxim.) Maxim. ex Franch. & Sav. 2017-07-13 Пименова Е.А. VBGI From plantlist TRUE lobatum Russia 140276 NULL 42.45782 Actinostemma Приморский край оз. Лотос, на сплавине
(Buch.-Ham. ex Roxb.) Maxim. 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE dianthera Russia 140277 NULL 42.45782 Mosla Приморский край оз. Лотос, на сплавине
(Buch.-Ham. ex Roxb.) Maxim. 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE dianthera Russia 140278 NULL 42.45782 Mosla Приморский край оз. Лотос, на сплавине
Makino 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE jatabeana Russia 140279 NULL 42.45782 Dysophylla Приморский край оз. Лотос, на сплавине
(R. Keller) Y. Kimura 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE japonicum Russia 140280 NULL 42.45782 Triadenum Приморский край оз. Лотос, на сплавине
(R. Keller) Y. Kimura 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE japonicum Russia 140281 NULL 42.45782 Triadenum Приморский край оз. Лотос, на сплавине
Benth. 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE chinensis Russia 140282 NULL 42.56007 Siphonostegia Приморский край дорога к пос. Хасан, перевал
Benth. 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE chinensis Russia 140283 NULL 42.55994 Siphonostegia Приморский край дорога к пос. Хасан, перевал
Miq. 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE pierotii Russia 140284 NULL 42.55981 Salix Приморский край дорога на пос. Хасан, скала у дороги
L. 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE caprea Russia 140285 NULL 42.56045 Salix Приморский край дорога н апос. Хасан, скала у дороги
(Thunb.) Schindl. 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE striata Russia 141437 NULL 42.55943 Kummerowia Приморский край дорога на пос. Хасан, скала у дороги
Miq. 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE cyrtobotrya Russia 140287 NULL 42.47370 Lespedeza Приморский край перевал от оз. Лотос
Miq. 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE cyrtobotrya Russia 140288 NULL 42.47415 Lespedeza Приморский край перевал от оз. Лотос
(Pall.) DC. 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE dahuricus Russia 140289 NULL 42.87962 Astragalus Приморский край трасса после поворота на Славянку, обочина
Thunb. 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE dentata Russia 140290 NULL 42.45782 Quercus Приморский край оз. Лотос, берег
Thunb. 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE dentata Russia 140291 NULL 42.45782 Quercus Приморский край оз. Лотос, берег
(Siebold et Zucc.) Sojak 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE thunbergii Russia 140292 NULL 42.45782 Truellum Приморский край оз. Лотос, на сплавине
(Siebold et Zucc.) Sojak 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE thunbergii Russia 140293 NULL 42.45782 Truellum Приморский край оз. Лотос, на сплавине
Hance 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE sinica Russia 140294 NULL 42.44926 Anaphalis Приморский край оз. Лотос, разреженный дубняк
Willd. 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE parviflora Russia 140296 NULL 42.55994 Bidens Приморский край дорога к пос. Хасан, скала у дороги
Planch. 2017-06-13 Пименова Е.А. VBGI From plantlist FALSE stelleroides Russia 140297 NULL 42.55918 Linum Приморский край дорога к пос. Хасан, скала, обочина дороги
Maxim. 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE hologlottis Russia 140298 NULL 42.53378 Platanthera Приморский край небольшой перевал к оз. Птичье, сырой луг
Maxim. 2017-06-13 Пименова Е.А. VBGI From plantlist TRUE hologlottis Russia 140299 NULL 42.53378 Platanthera Приморский край небольшой перевал к оз. Птичье, сырой луг
Maxim. 2017-07-11 Колдаева М.Н., Калинкина В.А., Пименова Е.А. VBGI From plantlist TRUE obovata Russia 146287 NULL 43.33023 Paeonia Приморский край р. Амба, руч. Рыбий, долина
Siebold & Zucc. 2017-07-11 Колдаева М.Н., Калинкина В.А., Пименова Е.А. VBGI From plantlist TRUE cuspidata Russia 146378 NULL 43.39640 Taxus Приморский край р. Амба, Олений Утёс, смешанный лес
Turcz. 2017-06-14 Пименова Е.А., Калинкина В.А., Колдаева М.Н., Тонкова Н.А. и др. VBGI From plantlist FALSE subcordata Russia 113716 NULL 45.64086 Woodsia Приморский край р. Кема, близ устья р. Геологическая (Секунджа), скалистый берег, на скале.
(T. Moore) Christ 2017-06-14 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE wilfordii Russia 113747 NULL 43.49004 Dennstaedtia Приморский край Борисовское плато, верх. течение р. Нежинка, устье руч. Раздольненский, на скалах..
(T. Moore) Christ 2017-06-14 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Петруненко Е.А., Шилова А. VBGI From plantlist TRUE wilfordii Russia 113746 NULL 43.28614 Dennstaedtia Приморский край верховье р. Амба, правый берег (хр. Скалистый), сев. эксп., ниже водораздела, замшелая скала.
(T. Moore) Christ 2017-06-14 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Петруненко Е.А., Шилова А. VBGI From plantlist TRUE wilfordii Russia 113745 NULL 43.28614 Dennstaedtia Приморский край верховье р. Амба, правый берег (хр. Скалистый), сев. эксп., ниже водораздела, замшелая скала.
(T. Moore) Christ 2017-06-14 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Петруненко Е.А., Шилова А. VBGI From plantlist TRUE wilfordii Russia 113744 NULL 43.28614 Dennstaedtia Приморский край верховье р. Амба, правый берег (хр. Скалистый), сев. эксп., ниже водораздела, замшелая скала.
(T. Moore) Christ 2017-06-15 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Петруненко Е.А., Шилова А. VBGI From plantlist TRUE wilfordii Russia 101949 NULL 43.28614 Dennstaedtia Приморский край верховье р. Амба, водораздел между верховьями руч. Четвертый и Пятый, скальные выходы под хр. сев. эксп. (нижний уровень), замшелые влажные скалы.
(Franch. & Sav.) Ching 2017-06-20 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Петруненко Е.А., Шилова А. VBGI From plantlist TRUE nipponica Russia 113601 NULL 43.29804 Parathelypteris Приморский край р. Амба, водораздел руч. Пятый и Четверный, каменистый склон, подножье скального массива, смеш.-широк. лес.
(Franch. & Sav.) Ching 2017-06-20 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Петруненко Е.А., Шилова А. VBGI From plantlist TRUE nipponica Russia 113602 NULL 43.29804 Parathelypteris Приморский край р. Амба, водораздел руч. Пятый и Четверный, каменистый склон, подножье скального массива, смеш.-широк. лес.
(Franch. & Sav.) Ching 2017-06-22 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE nipponica Russia 113701 NULL 43.43939 Parathelypteris Приморский край Борисовское плато, верх. течение р. Нежинка, водораздел руч. Раздольненский и р. Вторая Речка, мочажина с кочками среди леса.
Tzvelev 2017-06-22 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist TRUE amurensis Russia 113748 NULL 43.43889 Leptorumohra Приморский край Борисовское плато, верх. течение р. Нежинка, водораздел руч. Раздольненский и р. Вторая Речка, смешанный лес на вершине.
(C. Presl) Fraser-Jenk. & Jermy 2017-06-28 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Петруненко Е.А., Шилова А. VBGI From plantlist FALSE expansa Russia 113739 NULL 43.31606 Dryopteris Приморский край р. Амба, водораздел руч. Пятый и руч. Кривой, смешанный лес.
(C. Presl) Fraser-Jenk. & Jermy 2017-06-28 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Петруненко Е.А., Шилова А. VBGI From plantlist FALSE expansa Russia 113740 NULL 43.31606 Dryopteris Приморский край р. Амба, водораздел руч. Пятый и руч. Кривой, смешанный лес.
(C. Presl) Fraser-Jenk. & Jermy 2017-06-29 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE expansa Russia 113758 NULL 43.49402 Dryopteris Приморский края Борисовское плато, верх. течение р. Нежинка, водораздел руч. Раздольненский и р. Вторая Речка, склон, смешанный лес.
(C. Presl) Fraser-Jenk. & Jermy 2017-06-29 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE expansa Russia 113760 NULL 43.49402 Dryopteris Приморский края Борисовское плато, верх. течение р. Нежинка, водораздел руч. Раздольненский и р. Вторая Речка, склон, смешанный лес.
(C. Presl) Fraser-Jenk. & Jermy 2017-06-29 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE expansa Russia 113757 NULL 43.49402 Dryopteris Приморский края Борисовское плато, верх. течение р. Нежинка, водораздел руч. Раздольненский и р. Вторая Речка, склон, смешанный лес.
(C. Presl) Fraser-Jenk. & Jermy 2017-06-29 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE expansa Russia 113751 NULL 43.49402 Dryopteris Приморский края Борисовское плато, верх. течение р. Нежинка, водораздел руч. Раздольненский и р. Вторая Речка, склон, смешанный лес.
(C. Presl) Fraser-Jenk. & Jermy 2017-06-29 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE expansa Russia 113759 NULL 43.49402 Dryopteris Приморский края Борисовское плато, верх. течение р. Нежинка, водораздел руч. Раздольненский и р. Вторая Речка, склон, смешанный лес.
Kom. 2017-07-27 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Брижатая А.А. VBGI From plantlist FALSE sichotensis Russia 113727 NULL 43.65323 Dryopteris Приморский края нац. парк "Зов тигра", г. Облачная, елово-пихтовый лес.
Kom. 2017-07-27 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Брижатая А.А. VBGI From plantlist FALSE sichotensis Russia 113728 NULL 43.65323 Dryopteris Приморский края нац. парк "Зов тигра", г. Облачная, нижняя часть склона.
Kom. 2017-07-27 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Брижатая А.А. VBGI From plantlist FALSE sichotensis Russia 113729 NULL 43.65323 Dryopteris Приморский края нац. парк "Зов тигра", г. Облачная, елово-пихтовый лес.
Kom. 2017-07-27 Пименова Е.А., Колдаева М.Н., Калинкина В.А., Брижатая А.А. VBGI From plantlist FALSE sichotensis Russia 113730 NULL 43.61518 Dryopteris Приморский края нац. парк "Зов тигра", г. Победа, склон.
Kom. 2017-07-27 Пименова Е.А., Калинкина В.А., Колдаева М.Н., Тонкова Н.А. и др. VBGI From plantlist FALSE sichotensis Russia 113741 NULL 45.89312 Dryopteris Приморский края верховья р. Средняя Амгу, водопад Большой Амгинский (Черный Шаман), щебнистый склон на спуске в каньон
Kom. 2017-07-27 Пименова Е.А., Калинкина В.А., Колдаева М.Н., Тонкова Н.А. и др. VBGI From plantlist FALSE sichotensis Russia 113742 NULL 45.89312 Dryopteris Приморский края верховья р. Средняя Амгу, водопад Большой Амгинский (Черный Шаман), щебнистый склон на спуске в каньон.
Nakai 2017-07-31 Баркалов В.Ю., Пименова Е.А., Нестерова С.В.., Петруненко Е.А., Соболева Е. VBGI From plantlist FALSE crassirhizoma Russia 113768 NULL 50.33339 Dryopteris Приморский край около 5 км от с. Овчинниково на запад, ср. течение р. Барабашевка, надпойменная терраса, лиственный лес.
(Kunze) Koidz. 2017-07-31 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE goeringiana Russia 113755 NULL 43.47659 Dryopteris Приморский край Борисовское плато, верх. течение р. Нежинка, близ устья руч. Раздольненский.
(Kunze) Koidz. 2017-07-31 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE goeringiana Russia 113754 NULL 43.47659 Dryopteris Приморский край Борисовское плато, верх. течение р. Нежинка, близ устья руч. Раздольненский, подножие скалы..
(Kunze) Koidz. 2017-07-31 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE goeringiana Russia 113749 NULL 43.47659 Dryopteris Приморский край Борисовское плато, верх. течение р. Нежинка, близ устья руч. Раздольненский, долинный лес.
(Kunze) Koidz. 2017-07-31 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE goeringiana Russia 113756 NULL 43.47659 Dryopteris Приморский край Борисовское плато, верх. течение р. Нежинка, близ устья руч. Раздольненский, подножие скалы.

Более сложные поисковые запросы можно структурировать используя списки:

In [4]:
http_api_base_url <- 'http://botsad.ru/hitem/json/?'
search_parameters <- c('collectedby', 'Пименова', 'identifiedby', 'Крестов')

В данном случае, параметры, наряду с их значениями, определены в виде списка search_parameters; далее, используется функция paste, чтобы построить из параметров и их значений поисковый URI (c(TRUE,FALSE) и c(False, True) используется, чтобы получить все четные и нечетные позиции массива search_parameters и правильно расставить символы & и =):

In [5]:
search_url <- paste(http_api_base_url, paste(search_parameters[c(TRUE, FALSE)], search_parameters[c(FALSE, TRUE)], sep='=', collapse='&'), sep='')
In [6]:
new_data <- fromJSON(search_url)
In [7]:
dim(new_data$data)
  1. 2
  2. 38
In [8]:
new_data$data
species_authorshipupdatedcollectorsacronymspecies_statussignificancegpsbasedspecies_epithetcountryidentification_finisheditemcodeadditionalscollection_finishedbranchshort_notelatitudegenusfieldidregiondetails
Tzvelev 2017-06-13 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE subtripteron 113762 NULL 2014-05-20 43.53312 Polystichum Приморский край Борисовское плато. верх. течение р. Нежинка, р. Раздольненский, долинный смешанный лес на надпойменной террасе.
Tzvelev 2017-06-13 Баркалов В.Ю., Крестов П.В., Колдаева М.Н.., Пименова Е.А., Петруненко Е.А. VBGI From plantlist FALSE subtripteron 113761 NULL 43.44694 Polystichum Приморский край Борисовское плато, верх. течение р. Нежинка, выше устья руч. Раздольненский, долинный смешанный лес на надпойменной террасе.

Вложенные структуры данных, представленные полями dethistory и additionals, также корректно преобразуются в data.frame посредством функции fromJSON:

In [9]:
new_data$data$dethistory
  1. species_authorshipspecies_idvalid_fromfamilyspecies_statusidentifiersfamily_authorshipvalid_tospecies_epithetsignificancegenusgenus_authorshipspecies_fullname
    Tzvelev 216942 2016-09-17 DRYOPTERIDACEAE From plantlist Храпко О.В. subtripteron Polystichum Polystichum subtripteron Tzvelev

Поскольку информация о гербарных сборах хранится в аттрибует data при загрузке данных с сервера, можно ввести вспомогательную переменную, чтобы не писать многократно new_data$data при обращении к данным:

In [10]:
my_data <- data$data
In [11]:
data.frame(table(my_data$family))
Var1Freq
ACORACEAE 1
ACTINIDIACEAE 4
ADOXACEAE 14
ALISMATACEAE 1
ALLISONIACEAE 2
AMARANTHACEAE 1
AMARYLLIDACEAE 10
APIACEAE 23
APOCYNACEAE 3
AQUIFOLIACEAE 1
ARACEAE 11
ARALIACEAE 13
ARISTOLOCHIACEAE 9
ASPARAGACEAE 17
ATHYRIACEAE 18
AYTONIACEAE 1
BERBERIDACEAE 8
BETULACEAE 21
BORAGINACEAE 16
BRASSICACEAE 26
CAMPANULACEAE 4
CAPRIFOLIACEAE 19
CARYOPHYLLACEAE 22
CELASTRACEAE 2
CHLORANTHACEAE 5
COMPOSITAE 58
CONOCEPHALACEAE 2
CRASSULACEAE 9
CUCURBITACEAE 1
CYPERACEAE 129
PHRYMACEAE 1
PINACEAE 9
PLANTAGINACEAE 1
POACEAE 61
POLEMONIACEAE 2
POLYGALACEAE 1
POLYGONACEAE 7
POLYPODIACEAE 4
PONTEDERIACEAE 1
POTAMOGETONACEAE 1
PRIMULACEAE 7
PTERIDACEAE 4
RANUNCULACEAE 51
RHAMNACEAE 14
ROSACEAE 75
RUBIACEAE 18
RUTACEAE 5
SALICACEAE 65
SANTALACEAE 5
SAPINDACEAE 17
SAXIFRAGACEAE 2
SMILACACEAE 1
TAXACEAE 1
THELYPTERIDACEAE 7
ULMACEAE 2
URTICACEAE 2
VIOLACEAE 46
VITACEAE 2
WOODSIACEAE 21
XANTHORRHOEACEAE 4

Для статистеской среды R создано огромное количество пакетов для решения задач статистической обработки данных практически на все случаи жизни. Например, если необходимо вычислить индекс биоразнообразия Шеннона, можно воспользоваться пакетом vegan, который также включает множество других дополнительных возможностей для решения задач обработки ботанических данных.

In [12]:
library(vegan)
Loading required package: permute
Loading required package: lattice
This is vegan 2.4-3

Индекс биоразнообразия Шэннона по аттрибуту "Семейство" (Family):

In [13]:
diversity(table(my_data$family))
3.87382516205788

Эмуляция OR-запросов

Поскольку HTTP-API при задании нескольких GET-параметров выполняет поиск тех записей, у которых одновременно выполняются все поисковые условия (т.е. AND-поисковый запрос), для имитации условий типа ИЛИ (OR) необходимо выполнить несколько последовательных запросов к поисковому сервису с последующей склейкой полученных результатов по уникальному коду записей ID.

Приведем пример выполнения OR-запроса; определим два набора параметров запроса в переменных search_parameters1 и search_parameters2:

In [14]:
search_parameters1 <- c('identifiedby', 'Пименова', 'collectedby', 'Пименова')
search_parameters2 <- c('identifiedby', 'Крестов', 'collectedby', 'Крестов')
search_url1 <- paste(http_api_base_url, paste(search_parameters1[c(TRUE, FALSE)], search_parameters1[c(FALSE, TRUE)], sep='=', collapse='&'), sep='')
search_url2 <- paste(http_api_base_url, paste(search_parameters2[c(TRUE, FALSE)], search_parameters2[c(FALSE, TRUE)], sep='=', collapse='&'), sep='')
In [15]:
search_url1
'http://botsad.ru/hitem/json/?identifiedby=Пименова&collectedby=Пименова'
In [16]:
search_url2
'http://botsad.ru/hitem/json/?identifiedby=Крестов&collectedby=Крестов'
In [17]:
dataset1 <- fromJSON(search_url1)
dataset2 <- fromJSON(search_url2)
In [18]:
df1<-data.frame(dataset1$data)
df2<-data.frame(dataset2$data)
In [19]:
merged_data <- rbind(df1, df2)
In [20]:
dim(df2)
dim(df1)
dim(merged_data)
  1. 179
  2. 38
  1. 878
  2. 38
  1. 1057
  2. 38

Сейчас переменная merged_data может содержать дублирующиеся строки; эти строки можно удалить, используя тот факт, что параметр id является для них уникальным.

In [21]:
data_without_dups<-merged_data[!duplicated(merged_data$id),]
In [22]:
dim(data_without_dups)
  1. 1055
  2. 38

Таким образом, контейнер данных (data.frame) data_without_dups представляет собой результат поискового запроса c параметрами search_parameters1 или search_parameters2 (т.е. найдены все записи, у которых в сборах и определении участвовал "Крестов", либо в сборах и определении участвовала "Пименова").

Поиск объектов в заданной области

Предположим, что область поиска задана и представляет собой ESRI-shapefile. Поскольку оброботчик поисковых запросов поддреживает задание только прямоугольных областей поиска, поиск по сложной области будет проходить в несколько этапов: 1) определим минимальную по площади прямоугольную область, в которую включается заданная; 2) выполним поиск данных в найденной прямоугольной области; 3) отфильтруем записи, не принадлежащие заданной области.

Для чтения shape-файлов в R нам потребуется установить библиотеку rgdal. Данный пакет используется отрытую библиотеку для обработки географически распределенных данных GDAL, которая нередко используется при создании различного рода геоинформационных систем (ГИС).

Таким образом, установка rgdal требует установленной библиотеки GDAL (наличие GDAL в меньшей степени касается пользователей Windows, поскольку пакет rgdal в своем Windows-дистрибутиве уже включает GDAL).

In [23]:
library('rgdal')
shape_rgdal <- readOGR(dsn=path.expand("/home/dmitry/workspace/herbs/herbs/docs/tutorial/R/ru/sakhalin"), layer="sakhalin")
Loading required package: sp
rgdal: version: 1.2-8, (SVN revision 663)
 Geospatial Data Abstraction Library extensions to R successfully loaded
 Loaded GDAL runtime: GDAL 1.11.3, released 2015/09/16
 Path to GDAL shared files: /usr/share/gdal
 Loaded PROJ.4 runtime: Rel. 4.9.2, 08 September 2015, [PJ_VERSION: 492]
 Path to PROJ.4 shared files: (autodetected)
 Linking to sp version: 1.2-5 
OGR data source with driver: ESRI Shapefile 
Source: "/home/dmitry/workspace/herbs/herbs/docs/tutorial/R/ru/sakhalin", layer: "sakhalin"
with 1 features
It has 8 fields
In [24]:
shape_rgdal
An object of class "SpatialPolygonsDataFrame"
Slot "data":
  iso_code level_4_na level4_cod level4_2 level3_cod level2_cod level1_cod
0       RU   Sakhalin     SAK-OO       OO        SAK         31          3
  mrgid
0 48418

Slot "polygons":
[[1]]
An object of class "Polygons"
Slot "Polygons":
[[1]]
An object of class "Polygon"
Slot "labpt":
[1] 142.71208  50.33426

Slot "area":
[1] 9.533439

Slot "hole":
[1] FALSE

Slot "ringDir":
[1] 1

Slot "coords":
           [,1]     [,2]
  [1,] 141.8425 53.14527
  [2,] 141.8364 53.14888
  [3,] 141.8319 53.15277
  [4,] 141.8272 53.16666
  [5,] 141.8094 53.25639
  [6,] 141.8105 53.29527
  [7,] 141.7708 53.35833
  [8,] 141.7647 53.36500
  [9,] 141.7669 53.37138
 [10,] 141.7780 53.37638
 [11,] 141.9814 53.45499
 [12,] 142.0922 53.49138
 [13,] 142.2136 53.51860
 [14,] 142.2269 53.51833
 [15,] 142.2519 53.48555
 [16,] 142.2539 53.47887
 [17,] 142.2514 53.47249
 [18,] 142.2397 53.45305
 [19,] 142.2364 53.42055
 [20,] 142.2358 53.40749
 [21,] 142.2447 53.38721
 [22,] 142.2533 53.38055
 [23,] 142.2747 53.36971
 [24,] 142.3516 53.35610
 [25,] 142.4641 53.38305
 [26,] 142.4753 53.38694
 [27,] 142.4864 53.39194
 [28,] 142.4955 53.39833
 [29,] 142.5025 53.40471
 [30,] 142.5092 53.41110
 [31,] 142.5208 53.42388
 [32,] 142.5530 53.46249
 [33,] 142.5577 53.46888
 [34,] 142.6803 53.50999
 [35,] 142.6819 53.52361
 [36,] 142.6764 53.54305
 [37,] 142.6722 53.54972
 [38,] 142.6139 53.56916
 [39,] 142.6030 53.57055
 [40,] 142.5591 53.56999
 [41,] 142.5478 53.56361
 [42,] 142.5411 53.55721
 [43,] 142.5364 53.55083
 [44,] 142.5294 53.54444
 [45,] 142.5183 53.53805
 [46,] 142.5119 53.54333
 [47,] 142.5056 53.55000
 [48,] 142.5016 53.56305
 [49,] 142.4950 53.60889
 [50,] 142.4936 53.62833
 [51,] 142.4927 53.65443
 [52,] 142.4950 53.66110
 [53,] 142.5042 53.66721
 [54,] 142.5153 53.67110
 [55,] 142.5375 53.67332
 [56,] 142.6367 53.67944
 [57,] 142.6478 53.67666
 [58,] 142.6583 53.66999
 [59,] 142.6669 53.66332
 [60,] 142.6750 53.64999
 [61,] 142.6769 53.64361
 [62,] 142.6830 53.63694
 [63,] 142.6938 53.63027
 [64,] 142.7047 53.62860
 [65,] 142.7158 53.62971
 [66,] 142.7269 53.63361
 [67,] 142.7361 53.63999
 [68,] 142.7750 53.67166
 [69,] 142.7983 53.69749
 [70,] 142.8008 53.70388
 [71,] 142.7994 53.71693
 [72,] 142.7944 53.74972
 [73,] 142.7858 53.79555
 [74,] 142.7747 53.83472
 [75,] 142.7705 53.84138
 [76,] 142.7594 53.84277
 [77,] 142.7389 53.82221
 [78,] 142.7322 53.82154
 [79,] 142.7254 53.81855
 [80,] 142.7140 53.80305
 [81,] 142.7110 53.79538
 [82,] 142.7092 53.78755
 [83,] 142.7089 53.77972
 [84,] 142.7064 53.76772
 [85,] 142.6891 53.73916
 [86,] 142.6772 53.71971
 [87,] 142.6703 53.71333
 [88,] 142.6614 53.70833
 [89,] 142.6500 53.70332
 [90,] 142.6164 53.69083
 [91,] 142.6055 53.69110
 [92,] 142.6036 53.69749
 [93,] 142.6111 53.71693
 [94,] 142.6678 53.80527
 [95,] 142.6907 53.84010
 [96,] 142.6952 53.84777
 [97,] 142.6969 53.85560
 [98,] 142.7216 53.92444
 [99,] 142.7197 53.93082
[100,] 142.7116 53.94415
[101,] 142.7052 53.95083
[102,] 142.6625 53.98416
[103,] 142.5964 54.03611
[104,] 142.5000 54.11194
[105,] 142.4847 54.12527
[106,] 142.4658 54.14500
[107,] 142.4594 54.15166
[108,] 142.3939 54.23750
[109,] 142.4019 54.26611
[110,] 142.4803 54.27388
[111,] 142.5269 54.24249
[112,] 142.5289 54.23611
[113,] 142.5352 54.23082
[114,] 142.5464 54.22916
[115,] 142.5686 54.22887
[116,] 142.5800 54.23388
[117,] 142.6394 54.26277
[118,] 142.6466 54.27583
[119,] 142.6519 54.28860
[120,] 142.6269 54.32555
[121,] 142.6805 54.41332
[122,] 142.6852 54.41972
[123,] 142.6966 54.42471
[124,] 142.7077 54.42471
[125,] 142.7191 54.42444
[126,] 142.7303 54.42305
[127,] 142.7411 54.41750
[128,] 142.7475 54.41082
[129,] 142.7536 54.39777
[130,] 142.7597 54.38472
[131,] 142.7617 54.37804
[132,] 142.7739 54.35833
[133,] 142.8133 54.29888
[134,] 142.8197 54.29222
[135,] 142.9136 54.21471
[136,] 143.0050 54.13750
[137,] 143.0114 54.13082
[138,] 143.0150 54.11749
[139,] 143.0086 54.08527
[140,] 142.9983 54.05916
[141,] 142.9911 54.04639
[142,] 142.9814 54.03361
[143,] 142.9602 54.01444
[144,] 142.9511 54.00805
[145,] 142.9369 53.99527
[146,] 142.9253 53.98249
[147,] 142.8786 53.89610
[148,] 142.8813 53.80804
[149,] 142.9016 53.77499
[150,] 142.9547 53.71860
[151,] 143.0114 53.66527
[152,] 143.1039 53.55499
[153,] 143.1247 53.50249
[154,] 143.1319 53.47610
[155,] 143.1100 53.40110
[156,] 143.0941 53.38972
[157,] 143.0872 53.38333
[158,] 143.0955 53.37666
[159,] 143.1064 53.37638
[160,] 143.1186 53.37804
[161,] 143.1297 53.38055
[162,] 143.1408 53.38527
[163,] 143.1500 53.39166
[164,] 143.1611 53.39666
[165,] 143.1722 53.39916
[166,] 143.1811 53.39888
[167,] 143.1991 53.37249
[168,] 143.2030 53.36583
[169,] 143.2263 53.32083
[170,] 143.2855 53.14999
[171,] 143.2892 53.13694
[172,] 143.2908 53.13027
[173,] 143.3291 52.91444
[174,] 143.3375 52.82916
[175,] 143.3375 52.73860
[176,] 143.3375 52.73360
[177,] 143.3369 52.71832
[178,] 143.3350 52.69249
[179,] 143.3258 52.59888
[180,] 143.3216 52.55721
[181,] 143.3169 52.53055
[182,] 143.3086 52.48777
[183,] 143.3064 52.47694
[184,] 143.3011 52.46055
[185,] 143.2919 52.44276
[186,] 143.2852 52.43111
[187,] 143.2542 52.39249
[188,] 143.2402 52.37666
[189,] 143.2305 52.36694
[190,] 143.2041 52.34471
[191,] 143.1950 52.34638
[192,] 143.1919 52.40971
[193,] 143.1958 52.42083
[194,] 143.2000 52.42694
[195,] 143.2136 52.44276
[196,] 143.2188 52.44721
[197,] 143.2316 52.45249
[198,] 143.2928 52.57916
[199,] 143.2941 52.58443
[200,] 143.2939 52.58943
[201,] 143.2852 52.59222
[202,] 143.2669 52.59471
[203,] 143.2580 52.59527
[204,] 143.2511 52.59361
[205,] 143.2477 52.58860
[206,] 143.1528 52.38166
[207,] 143.1650 52.32722
[208,] 143.1797 52.31583
[209,] 143.1814 52.31138
[210,] 143.1497 52.13110
[211,] 143.1316 52.07639
[212,] 143.1250 51.96055
[213,] 143.1344 51.92332
[214,] 143.1650 51.86500
[215,] 143.1750 51.85750
[216,] 143.1950 51.85278
[217,] 143.2119 51.85194
[218,] 143.2183 51.85471
[219,] 143.2219 51.87110
[220,] 143.2213 51.88110
[221,] 143.2266 51.88555
[222,] 143.2336 51.88750
[223,] 143.2380 51.88333
[224,] 143.2427 51.87444
[225,] 143.2969 51.77110
[226,] 143.3014 51.76221
[227,] 143.3150 51.72943
[228,] 143.3172 51.70471
[229,] 143.3127 51.70277
[230,] 143.3083 51.70694
[231,] 143.3025 51.71027
[232,] 143.2947 51.71249
[233,] 143.2883 51.70972
[234,] 143.2833 51.70527
[235,] 143.2647 51.68416
[236,] 143.2583 51.67222
[237,] 143.2350 51.61277
[238,] 143.2339 51.60750
[239,] 143.2194 51.52583
[240,] 143.2208 51.52138
[241,] 143.2286 51.50805
[242,] 143.2341 51.50444
[243,] 143.2413 51.50111
[244,] 143.3105 51.51250
[245,] 143.3350 51.55360
[246,] 143.3289 51.56750
[247,] 143.3258 51.57666
[248,] 143.3236 51.59138
[249,] 143.3250 51.60777
[250,] 143.3261 51.61305
[251,] 143.3352 51.62360
[252,] 143.3402 51.62804
[253,] 143.3572 51.63972
[254,] 143.3641 51.64166
[255,] 143.3708 51.64138
[256,] 143.3766 51.63277
[257,] 143.4500 51.49860
[258,] 143.4561 51.48472
[259,] 143.4591 51.47027
[260,] 143.4661 51.39555
[261,] 143.4688 51.36055
[262,] 143.4589 51.34860
[263,] 143.4530 51.35722
[264,] 143.4472 51.36082
[265,] 143.4280 51.36500
[266,] 143.4150 51.36055
[267,] 143.3819 51.34860
[268,] 143.3783 51.34471
[269,] 143.3827 51.34055
[270,] 143.4700 51.26777
[271,] 143.4958 51.29916
[272,] 143.4969 51.30471
[273,] 143.5031 51.30332
[274,] 143.5103 51.29500
[275,] 143.5191 51.27694
[276,] 143.5269 51.25861
[277,] 143.5341 51.23943
[278,] 143.5658 51.10722
[279,] 143.5705 51.07749
[280,] 143.5711 51.06221
[281,] 143.5886 50.99527
[282,] 143.6491 50.83388
[283,] 143.6600 50.80083
[284,] 143.6869 50.69554
[285,] 143.6936 50.65638
[286,] 143.7222 50.52499
[287,] 143.7691 50.36944
[288,] 143.7750 50.35055
[289,] 143.7919 50.30054
[290,] 143.7978 50.28694
[291,] 143.8080 50.26916
[292,] 143.8108 50.26472
[293,] 143.8280 50.24361
[294,] 143.8350 50.23527
[295,] 143.8463 50.22305
[296,] 143.8591 50.21111
[297,] 143.8747 50.19471
[298,] 143.8905 50.17332
[299,] 143.9413 50.10416
[300,] 143.9938 50.03111
[301,] 144.0025 50.01805
[302,] 144.0042 50.00833
[303,] 144.0641 49.84471
[304,] 144.2141 49.47110
[305,] 144.2222 49.41666
[306,] 144.2280 49.39777
[307,] 144.2758 49.26138
[308,] 144.3930 49.05222
[309,] 144.4036 49.03388
[310,] 144.4077 49.02999
[311,] 144.4175 49.02222
[312,] 144.4991 48.97221
[313,] 144.5183 48.96194
[314,] 144.5591 48.94221
[315,] 144.5728 48.93555
[316,] 144.6367 48.90138
[317,] 144.6650 48.88333
[318,] 144.6869 48.86860
[319,] 144.6908 48.86444
[320,] 144.6936 48.85999
[321,] 144.6950 48.85527
[322,] 144.7066 48.78055
[323,] 144.7052 48.77527
[324,] 144.7003 48.77083
[325,] 144.6917 48.75500
[326,] 144.6897 48.75200
[327,] 144.6890 48.74866
[328,] 144.6890 48.74249
[329,] 144.6909 48.73366
[330,] 144.6908 48.71333
[331,] 144.6972 48.69415
[332,] 144.7041 48.68055
[333,] 144.7097 48.67166
[334,] 144.7177 48.66360
[335,] 144.7233 48.65999
[336,] 144.7366 48.65332
[337,] 144.7461 48.65054
[338,] 144.7503 48.64666
[339,] 144.7516 48.64194
[340,] 144.7466 48.63721
[341,] 144.7394 48.63638
[342,] 144.7316 48.63638
[343,] 144.6900 48.64055
[344,] 144.6839 48.64305
[345,] 144.6783 48.64666
[346,] 144.6741 48.65582
[347,] 144.6531 48.72266
[348,] 144.6530 48.72882
[349,] 144.6520 48.74099
[350,] 144.6495 48.74949
[351,] 144.6470 48.75499
[352,] 144.6350 48.78999
[353,] 144.6155 48.82083
[354,] 144.5580 48.89277
[355,] 144.5375 48.91305
[356,] 144.4539 48.98472
[357,] 144.4413 48.99166
[358,] 144.3711 49.01361
[359,] 144.3641 49.01694
[360,] 144.3575 49.02027
[361,] 144.3463 49.02749
[362,] 144.2864 49.06777
[363,] 144.2780 49.07583
[364,] 144.2667 49.09361
[365,] 144.2597 49.10694
[366,] 144.2583 49.11194
[367,] 144.2542 49.12110
[368,] 144.2458 49.12916
[369,] 144.1528 49.19694
[370,] 144.1417 49.20416
[371,] 144.1022 49.22443
[372,] 144.0611 49.24416
[373,] 144.0203 49.25861
[374,] 143.9819 49.26888
[375,] 143.9455 49.27638
[376,] 143.9286 49.27777
[377,] 143.9130 49.27777
[378,] 143.8701 49.28219
[379,] 143.8361 49.28638
[380,] 143.7069 49.30249
[381,] 143.4655 49.35972
[382,] 143.4569 49.36749
[383,] 143.4291 49.38583
[384,] 143.4100 49.39583
[385,] 143.3919 49.39916
[386,] 143.3672 49.40054
[387,] 143.3513 49.40027
[388,] 143.2969 49.39861
[389,] 143.2825 49.39666
[390,] 143.2622 49.39083
[391,] 143.2561 49.38833
[392,] 143.2505 49.38472
[393,] 143.2461 49.37916
[394,] 143.2463 49.37416
[395,] 143.2480 49.36944
[396,] 143.2572 49.36111
[397,] 143.3122 49.31638
[398,] 143.3203 49.31361
[399,] 143.3438 49.31388
[400,] 143.3669 49.31527
[401,] 143.3966 49.31833
[402,] 143.4117 49.31944
[403,] 143.4347 49.32055
[404,] 143.4975 49.32138
[405,] 143.6011 49.32027
[406,] 143.6344 49.31805
[407,] 143.6619 49.31221
[408,] 143.6661 49.30833
[409,] 143.6600 49.30555
[410,] 143.6525 49.30444
[411,] 143.6055 49.30388
[412,] 143.5422 49.30388
[413,] 143.5005 49.30694
[414,] 143.4850 49.30666
[415,] 143.4261 49.29972
[416,] 143.3394 49.28694
[417,] 143.2903 49.27721
[418,] 143.2694 49.27249
[419,] 143.2628 49.27055
[420,] 143.1936 49.24610
[421,] 143.1433 49.22582
[422,] 143.1372 49.22305
[423,] 143.1255 49.21666
[424,] 143.0789 49.19110
[425,] 143.0736 49.18749
[426,] 143.0364 49.15943
[427,] 143.0314 49.15499
[428,] 143.0178 49.13972
[429,] 143.0133 49.13416
[430,] 142.9891 49.10139
[431,] 142.9841 49.08971
[432,] 142.9719 49.06027
[433,] 142.9683 49.04888
[434,] 142.9661 49.03805
[435,] 142.9650 49.02721
[436,] 142.9658 49.01194
[437,] 142.9719 48.99305
[438,] 142.9763 48.98388
[439,] 142.9822 48.97499
[440,] 142.9866 48.96082
[441,] 142.9900 48.94610
[442,] 142.9916 48.93638
[443,] 142.9925 48.92083
[444,] 142.9902 48.90999
[445,] 142.9783 48.89194
[446,] 142.9738 48.88666
[447,] 142.9280 48.81944
[448,] 142.8630 48.70972
[449,] 142.7811 48.55416
[450,] 142.7686 48.52972
[451,] 142.7600 48.51167
[452,] 142.7505 48.48804
[453,] 142.7469 48.47665
[454,] 142.6722 48.30444
[455,] 142.6197 48.20499
[456,] 142.6164 48.19332
[457,] 142.6127 48.18194
[458,] 142.5991 48.14555
[459,] 142.5686 48.07527
[460,] 142.5358 48.00805
[461,] 142.5347 48.00278
[462,] 142.5291 47.89666
[463,] 142.5300 47.87582
[464,] 142.5347 47.80416
[465,] 142.5367 47.78916
[466,] 142.5572 47.71666
[467,] 142.5680 47.68333
[468,] 142.5725 47.67416
[469,] 142.6039 47.62054
[470,] 142.6197 47.59388
[471,] 142.6311 47.57639
[472,] 142.7139 47.48499
[473,] 142.7797 47.42583
[474,] 142.7969 47.42055
[475,] 142.8291 47.40916
[476,] 142.8450 47.40332
[477,] 142.8600 47.39722
[478,] 142.8733 47.39055
[479,] 142.9005 47.37249
[480,] 142.9142 47.36082
[481,] 142.9264 47.34860
[482,] 143.0144 47.25417
[483,] 143.0200 47.24527
[484,] 143.0214 47.24055
[485,] 143.1058 46.91999
[486,] 143.1119 46.89055
[487,] 143.1069 46.84277
[488,] 143.0950 46.83721
[489,] 143.0902 46.83277
[490,] 143.0861 46.82722
[491,] 143.0836 46.82138
[492,] 143.0839 46.81610
[493,] 143.0883 46.80166
[494,] 143.1669 46.70916
[495,] 143.1722 46.70555
[496,] 143.1902 46.70139
[497,] 143.3436 46.68055
[498,] 143.3589 46.68082
[499,] 143.3716 46.68443
[500,] 143.3769 46.68804
[501,] 143.3867 46.69721
[502,] 143.3908 46.70277
[503,] 143.3919 46.70833
[504,] 143.3867 46.71721
[505,] 143.3688 46.73305
[506,] 143.3769 46.78638
[507,] 143.4319 46.83305
[508,] 143.4372 46.83665
[509,] 143.4433 46.83943
[510,] 143.4497 46.84138
[511,] 143.4577 46.84055
[512,] 143.4725 46.83416
[513,] 143.4805 46.82610
[514,] 143.4916 46.80860
[515,] 143.5219 46.71805
[516,] 143.5233 46.70805
[517,] 143.5236 46.70277
[518,] 143.5225 46.69721
[519,] 143.5150 46.68472
[520,] 143.5125 46.67860
[521,] 143.5114 46.67305
[522,] 143.5117 46.66805
[523,] 143.5150 46.64277
[524,] 143.5244 46.58221
[525,] 143.5486 46.49972
[526,] 143.5544 46.48055
[527,] 143.5786 46.40916
[528,] 143.6019 46.38361
[529,] 143.5875 46.35166
[530,] 143.5203 46.22694
[531,] 143.5164 46.22054
[532,] 143.5111 46.21693
[533,] 143.5005 46.20972
[534,] 143.4897 46.20222
[535,] 143.4803 46.19332
[536,] 143.4761 46.18777
[537,] 143.4688 46.16999
[538,] 143.4655 46.15332
[539,] 143.4658 46.14805
[540,] 143.4713 46.12888
[541,] 143.4747 46.10860
[542,] 143.4750 46.09833
[543,] 143.4738 46.09277
[544,] 143.4314 46.01944
[545,] 143.4253 46.01944
[546,] 143.4077 46.07749
[547,] 143.4075 46.08250
[548,] 143.4247 46.12860
[549,] 143.4280 46.18194
[550,] 143.4275 46.20277
[551,] 143.4230 46.21721
[552,] 143.4175 46.23138
[553,] 143.4119 46.24527
[554,] 143.3880 46.29610
[555,] 143.3589 46.35555
[556,] 143.3455 46.37833
[557,] 143.3397 46.39749
[558,] 143.3394 46.40804
[559,] 143.3452 46.46221
[560,] 143.3650 46.48666
[561,] 143.3708 46.48943
[562,] 143.3752 46.49500
[563,] 143.3861 46.51916
[564,] 143.3883 46.53027
[565,] 143.3867 46.53500
[566,] 143.3786 46.54833
[567,] 143.3677 46.55582
[568,] 143.3614 46.55888
[569,] 143.3522 46.56166
[570,] 143.3436 46.56305
[571,] 143.1691 46.58999
[572,] 143.1361 46.59388
[573,] 143.1291 46.59277
[574,] 143.1164 46.58888
[575,] 143.1105 46.58611
[576,] 143.1036 46.58499
[577,] 143.0825 46.58194
[578,] 143.0594 46.58250
[579,] 143.0097 46.58888
[580,] 142.8791 46.59721
[581,] 142.8047 46.59388
[582,] 142.7972 46.59388
[583,] 142.7805 46.59610
[584,] 142.7739 46.59943
[585,] 142.7697 46.60361
[586,] 142.7469 46.64916
[587,] 142.7339 46.68194
[588,] 142.7325 46.68694
[589,] 142.7272 46.71666
[590,] 142.7283 46.72221
[591,] 142.7274 46.73777
[592,] 142.7236 46.74194
[593,] 142.7175 46.74416
[594,] 142.7097 46.74416
[595,] 142.6003 46.71138
[596,] 142.5753 46.70277
[597,] 142.5264 46.68250
[598,] 142.4969 46.66833
[599,] 142.4869 46.65999
[600,] 142.4680 46.64166
[601,] 142.4214 46.58250
[602,] 142.2953 46.34083
[603,] 142.2500 46.19638
[604,] 142.2272 46.11250
[605,] 142.2000 46.02610
[606,] 142.1964 46.01971
[607,] 142.0963 45.89527
[608,] 142.0911 45.89138
[609,] 142.0855 45.88860
[610,] 142.0775 45.89138
[611,] 142.0505 45.91471
[612,] 142.0341 45.93082
[613,] 141.9291 46.03583
[614,] 141.9264 46.04028
[615,] 141.9250 46.04500
[616,] 141.9247 46.05027
[617,] 141.9255 46.05582
[618,] 141.9278 46.06194
[619,] 141.9350 46.07471
[620,] 141.9372 46.08055
[621,] 141.9383 46.08611
[622,] 141.9380 46.09138
[623,] 141.9000 46.26971
[624,] 141.8936 46.28889
[625,] 141.8878 46.30277
[626,] 141.8816 46.31667
[627,] 141.8522 46.38166
[628,] 141.8380 46.40721
[629,] 141.8308 46.42083
[630,] 141.8291 46.42555
[631,] 141.8272 46.43555
[632,] 141.8194 46.48582
[633,] 141.8152 46.53944
[634,] 141.8127 46.58611
[635,] 141.8136 46.59166
[636,] 141.8158 46.59777
[637,] 141.9753 46.89471
[638,] 141.9836 46.90582
[639,] 141.9913 46.91750
[640,] 142.0225 46.97638
[641,] 142.0308 46.99471
[642,] 142.0480 47.03666
[643,] 142.0503 47.04250
[644,] 142.0514 47.04805
[645,] 142.0555 47.07055
[646,] 142.0586 47.08721
[647,] 142.0594 47.12471
[648,] 142.0583 47.14527
[649,] 142.0550 47.16027
[650,] 142.0519 47.16972
[651,] 142.0411 47.20305
[652,] 142.0297 47.23221
[653,] 142.0180 47.25000
[654,] 142.0142 47.25388
[655,] 141.9936 47.26860
[656,] 141.9783 47.27999
[657,] 141.9702 47.28805
[658,] 141.9528 47.45750
[659,] 141.9511 47.48860
[660,] 141.9614 47.59138
[661,] 141.9647 47.60860
[662,] 142.0033 47.69666
[663,] 142.0816 47.83665
[664,] 142.0855 47.84305
[665,] 142.1028 47.86388
[666,] 142.1219 47.88221
[667,] 142.1333 47.88860
[668,] 142.1436 47.89694
[669,] 142.1580 47.91055
[670,] 142.1722 47.92444
[671,] 142.1766 47.92972
[672,] 142.1864 47.94833
[673,] 142.1886 47.95416
[674,] 142.1894 47.96500
[675,] 142.1889 47.97527
[676,] 142.1841 47.98943
[677,] 142.1789 48.01416
[678,] 142.1769 48.02416
[679,] 142.1733 48.04388
[680,] 142.1686 48.08416
[681,] 142.1619 48.16638
[682,] 142.1566 48.24332
[683,] 142.1514 48.26777
[684,] 142.1480 48.28249
[685,] 142.1464 48.28722
[686,] 142.1355 48.31554
[687,] 142.1311 48.32444
[688,] 142.1075 48.37054
[689,] 142.1003 48.38388
[690,] 142.0855 48.40582
[691,] 142.0755 48.41860
[692,] 142.0155 48.48972
[693,] 141.9358 48.58167
[694,] 141.9169 48.60750
[695,] 141.9083 48.62054
[696,] 141.8886 48.65638
[697,] 141.8750 48.68388
[698,] 141.8605 48.72638
[699,] 141.8524 48.75027
[700,] 141.8530 48.76083
[701,] 141.8569 48.76721
[702,] 141.8697 48.78333
[703,] 141.9128 48.82527
[704,] 141.9225 48.83443
[705,] 141.9475 48.84527
[706,] 141.9530 48.84888
[707,] 141.9625 48.85805
[708,] 141.9675 48.86999
[709,] 141.9963 48.94916
[710,] 142.0022 48.96638
[711,] 142.0278 49.04166
[712,] 142.0700 49.24222
[713,] 142.0669 49.25166
[714,] 142.0650 49.26167
[715,] 142.0641 49.27694
[716,] 142.0644 49.29778
[717,] 142.0647 49.31361
[718,] 142.0667 49.32972
[719,] 142.0686 49.34055
[720,] 142.0741 49.36305
[721,] 142.0791 49.37471
[722,] 142.0864 49.38721
[723,] 142.0969 49.40499
[724,] 142.1044 49.41750
[725,] 142.1188 49.45277
[726,] 142.1236 49.46444
[727,] 142.1353 49.52499
[728,] 142.1405 49.55249
[729,] 142.1511 49.63333
[730,] 142.1605 49.78638
[731,] 142.1591 49.81194
[732,] 142.1555 49.82639
[733,] 142.1522 49.83582
[734,] 142.1392 49.85860
[735,] 142.1272 49.88110
[736,] 142.1263 49.89111
[737,] 142.1386 49.94860
[738,] 142.1528 50.00527
[739,] 142.1739 50.09415
[740,] 142.1508 50.33167
[741,] 142.1472 50.35139
[742,] 142.1372 50.37943
[743,] 142.1324 50.38860
[744,] 142.1297 50.39277
[745,] 142.1127 50.40916
[746,] 142.1097 50.41360
[747,] 142.0566 50.49694
[748,] 142.0489 50.51028
[749,] 142.0425 50.52888
[750,] 142.0422 50.53416
[751,] 142.0441 50.55000
[752,] 142.0511 50.59833
[753,] 142.0519 50.60388
[754,] 142.0950 50.81305
[755,] 142.1252 50.88638
[756,] 142.1342 50.89722
[757,] 142.1441 50.90610
[758,] 142.1547 50.91415
[759,] 142.1716 50.92500
[760,] 142.1825 50.93305
[761,] 142.2014 50.95277
[762,] 142.2191 50.97416
[763,] 142.2316 50.99833
[764,] 142.2366 51.01009
[765,] 142.2488 51.03916
[766,] 142.2550 51.05610
[767,] 142.2633 51.07916
[768,] 142.2678 51.10083
[769,] 142.2678 51.10805
[770,] 142.2672 51.12027
[771,] 142.2608 51.13916
[772,] 142.2561 51.14805
[773,] 142.2514 51.15694
[774,] 142.2380 51.17388
[775,] 142.2305 51.18221
[776,] 142.0852 51.39833
[777,] 142.0805 51.40749
[778,] 142.0772 51.41666
[779,] 142.0811 51.42305
[780,] 142.0916 51.42888
[781,] 142.0966 51.43333
[782,] 142.0977 51.43888
[783,] 142.0944 51.44833
[784,] 142.0897 51.45721
[785,] 142.0791 51.46971
[786,] 142.0688 51.47721
[787,] 142.0052 51.51611
[788,] 141.9233 51.57055
[789,] 141.7972 51.67749
[790,] 141.8047 51.71749
[791,] 141.8111 51.72027
[792,] 141.8211 51.72916
[793,] 141.8250 51.73527
[794,] 141.8208 51.78027
[795,] 141.8175 51.78972
[796,] 141.7772 51.82471
[797,] 141.7597 51.83527
[798,] 141.6480 51.88666
[799,] 141.6400 52.07972
[800,] 141.6414 52.08582
[801,] 141.6439 52.09166
[802,] 141.6478 52.09777
[803,] 141.6522 52.10305
[804,] 141.6778 52.12555
[805,] 141.6866 52.13611
[806,] 141.6930 52.14805
[807,] 141.6950 52.15888
[808,] 141.6936 52.17916
[809,] 141.6686 52.25916
[810,] 141.6400 52.31110
[811,] 141.6380 52.31583
[812,] 141.6519 52.36555
[813,] 141.6569 52.37721
[814,] 141.6608 52.38333
[815,] 141.6658 52.38777
[816,] 141.6772 52.39500
[817,] 141.7030 52.40665
[818,] 141.7433 52.43194
[819,] 141.7536 52.44083
[820,] 141.7683 52.45527
[821,] 141.7908 52.48166
[822,] 141.8377 52.57805
[823,] 141.8389 52.58360
[824,] 141.8497 52.71305
[825,] 141.8586 52.85139
[826,] 141.8911 52.93555
[827,] 141.9219 53.00388
[828,] 141.9253 53.01999
[829,] 141.9247 53.02499
[830,] 141.9172 53.05332
[831,] 141.9122 53.06721
[832,] 141.8933 53.09277
[833,] 141.8669 53.12138
[834,] 141.8516 53.13750
[835,] 141.8425 53.14527



Slot "plotOrder":
[1] 1

Slot "labpt":
[1] 142.71208  50.33426

Slot "ID":
[1] "0"

Slot "area":
[1] 9.533439



Slot "plotOrder":
[1] 1

Slot "bbox":
       min       max
x 141.6380 144.75165
y  45.8886  54.42471

Slot "proj4string":
CRS arguments:
 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
In [25]:
bbox<-shape_rgdal@bbox
In [26]:
as.numeric(bbox)
  1. 141.638031005859
  2. 45.8886032104492
  3. 144.751647949219
  4. 54.4247131347656

Поскольку в текущей версии HTTP API поддерживаются только поисковые запросы с прямоугольными областями поиска, определим прямоугольную область, включающую необходимый контур shape-файла. Такая прмоугольная область хранится в слоте bbox, поэтому достаточно извлечь крайние значения широт и долгот из этого слота.

In [27]:
lonl<-as.numeric(bbox)[1]
lonu<-as.numeric(bbox)[3]
latl<-as.numeric(bbox)[2]
latu<-as.numeric(bbox)[4]

Далее, сформируем поисковый url и выполним поисковый запрос.

In [28]:
search_parameters_sakhalin <- c('lonl', lonl, 'lonu', lonu, 'latl', latl, 'latu', latu)
In [29]:
search_url_sakhalin <- paste(http_api_base_url, paste(search_parameters_sakhalin[c(TRUE, FALSE)], search_parameters_sakhalin[c(FALSE, TRUE)], sep='=', collapse='&'), sep='')
In [30]:
search_url_sakhalin
'http://botsad.ru/hitem/json/?lonl=141.638031005859&lonu=144.751647949219&latl=45.8886032104492&latu=54.4247131347656'
In [31]:
sakhalin_data <- fromJSON(search_url_sakhalin)

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

In [32]:
dim(sakhalin_data$data)
  1. 241
  2. 38
In [33]:
number_in_rectangle <- dim(sakhalin_data$data)[1]
In [34]:
sprintf("Таким образом, количество точек, принадлежащих прямоугольной области включающей о.Сахалин: %d", number_in_rectangle)
'Таким образом, количество точек, принадлежащих прямоугольной области включающей о.Сахалин: 241'

Проведем дополнительную фильтрацию, чтобы исключить точки, которые принадлежат прямоугольно области, но не попадают в контур острова, определенный в shape-файле. Для этого будем использовать пакет sp.

In [35]:
library(sp)
In [36]:
sakhalin_nonfiltered <- sakhalin_data$data

Преобразуем массив данных sakhalin_nonfiltered в массив пространственно-распределенных данных (S4 - объект среды R), для которого можно применить операцию

In [37]:
coordinates(sakhalin_nonfiltered) <- cbind(sakhalin_nonfiltered$longitude , sakhalin_nonfiltered$latitude)
In [38]:
sakhalin_nonfiltered@proj4string <- CRS(proj4string(shape_rgdal))
In [39]:
sakhalin_filtered<-sakhalin_nonfiltered[shape_rgdal,]
In [40]:
dim(sakhalin_filtered)
  1. 226
  2. 38
In [41]:
number_in_sakhalin <- dim(sakhalin_filtered)[1]
In [42]:
sprintf('Число записей, принадлежащих прямоугольной области, но не принадлежащих контуру о. Сахалин: %d', number_in_rectangle -number_in_sakhalin)
'Число записей, принадлежащих прямоугольной области, но не принадлежащих контуру о. Сахалин: 15'

Изложенная схема позволяет автоматизировать поисковые запросы к гербарной базе, выполнять поиск записей по сложным географическим областям и, в конечном счете, использовать возможности среды статистической обработки данных на базе R для выполнения научно-исследовательской работы.

In [43]:
sprintf('Дата выполнения кода документа: %s', Sys.Date())
'Дата выполнения кода документа: 2017-07-31'