Обращение к Яндекс-геокод из R

Опубликовано Опубликовано в рубрике Основная, Рецепты

Понадобилось мне как-то вывести всех клиентов на карту. Но проблема — в ERP есть их адреса, а вот координат нету. Но такую задачу отлично решают сервисы геокодирования, большинство из которых предоставляют к себе доступ через API.
Мой выбор пал на Яндекс.Геокодирование

Пришлось написать совсем небольшую функцию, которая на вход принимает строку адреса, а на выходе у нее — dataframe с широтой и долготой.
Вот такая функция:

library(rjson)
library(plyr)
library(XML)

geoYandex<-function(location)
{
stopifnot(is.character(location))
loc <- location
location <- gsub(",", "", location)
location <- gsub(" ", "+", location)
posturl <- paste(location)
url_string <- paste("http://geocode-maps.yandex.ru/1.x/?geocode=",
posturl, sep = "")
url_string <- URLencode(url_string)
xmlText <- paste(readLines(url_string), "\n", collapse="")
data<-xmlParse(xmlText, asText=TRUE)
xml_data <- xmlToList(data)
pos<-xml_data$GeoObjectCollection$featureMember$GeoObject$Point$pos
lon<-as.numeric(substr(pos,1,9))
lat<-as.numeric(substr(pos,11,19))
return (data.frame(lon,lat))
}

Использовать ее очень просто:
geoYandex('Ижевск,улица Свободы, 42А').

А уж имея такую функцию — было совсем не сложно прогнать ее по всей базе клиентов (помним о бесплатном количестве запросов в сутки в 25 000) и дополнить имеющиеся данные по клиентам их географическими координатами.

Обращение к Яндекс-геокод из R: 7 комментариев

  1. Почему Яндекс? Насколько помню из их лиц. соглашения, использовать в сторонних местах нельзя, и много прочих ограничений.
    Я пользуюсь гугловым, притом он уже реализован в R, и нет таких ограничений в лицензионной политике.

    1. Что-то я пытался пользоваться гугловым, но там что-то не пошло… То-ли Российские адреса хуже читал, то-ли там ограничение по частоте запросов было. Уж и не вспомню. Это давним опытом я тут поделился…

  2. Спасибо Вам, я начинающий пользователь R, мне ваш скрипт очень помог! (даже не представляете, как я сейчас радуюсь)

Добавить комментарий