RDSTK: Обратное геокодирование широты / долготы по городу (с использованием Coordinates2politics)

Я работаю над приложением Shiny для R, и я пытаюсь использовать пакет RDSTK для обратного геокодирования списка пар широты и долготы, получения CITY из результатов json и сохранения его в списке. Рабочий процесс:

  1. SQLDF для выбора всех записей в пределах диапазона дат.
  2. Обратный геокодирование записей и добавление столбца во фрейм данных с конкретным городом.
  3. Снова используйте SQLDF, чтобы получить подсчет по городам.

У меня много проблем с пониманием того, как взять вывод JSON, преобразовать его в фрейм данных, а затем привязать его обратно к исходному фрейму данных. Любая помощь приветствуется! См. Ниже код для справки:

Фрейм данных:

df <- data.frame(lat=c(34.048381, 37.757836, 40.729855, 42.356391),
             lon=c(-118.266164, -122.441033, -73.987921, -71.062307))

Мне удалось извлечь город из возвращенного списка JSON, но я не могу, хоть убей, выяснить, как сделать это несколько раз для большего списка пар широта / долгота. Поиск через stackoverflow в основном приводит к dstk за пределами R.

Мой идеальный результат:

lat        lon           city
34.048381  -118.266164   Los Angeles
37.757836  -122.441033   San Francisco
40.729855  -73.987921    New York
42.356391  -71.062307    Boston

Я также пробовал этот пример: R: Как геокодировать простой адрес с помощью Data Science Toolbox, хотя я, кажется, не могу перепроектировать его для Coordinates2politics.

Любой ввод?


person Bogdan Rau    schedule 21.03.2015    source источник


Ответы (2)


Звучит круто. В последнее время у меня были проблемы с RDSTK ... Я предполагаю, что стандартный сервер больше не работает для вас , как описано в блоге автора. Очень жаль.

Вот два обходных пути. Вы могли бы взять исходные пары широты и долготы, используя файл мест города из tigerfile, и использовать% over% в пакете sp, а затем извлечь имя из возвращенной формы. Это должно быть быстрее, чем повторные вызовы API.

Однако у меня такая же потребность в открытом геокодере в R, и есть несколько вариантов. Ознакомьтесь с ggmap, на который есть ссылка в ответе LukeA - можно использовать DSTK (ныне несуществующий) и представляет собой простой интерфейс для API Google всего за несколько вызовов. Также см. этот фантастический пост, описывающий, как использовать API геокодера бюро переписи. Напишите небольшую функцию-оболочку для обработки JSON, и все готово. Этот код работал у меня по состоянию на 01.01.2016.

person Mike Dolan Fliss    schedule 01.01.2016
comment
Я ценю это, Дрю, спасибо. Я отредактирую. Плюс у меня есть работоспособная версия, использующая что-то другое, кроме RDSTK. - person Mike Dolan Fliss; 02.01.2016
comment
Я проголосовал за это как за ответ, хотя отказался от RDSTK или других обратных геокодеров на основе API. Я решил просто создать один в R, который использует файлы TIGER и работает как задание cron в R. Работает намного лучше при массовом запуске. - person Bogdan Rau; 03.01.2016
comment
Отлично, рад, что вы нашли что-то, что сработало. Могу я спросить: можете ли вы подробнее рассказать о своем решении для работы cron? Вы просто повторно запускаете код R по частям с течением времени? - person Mike Dolan Fliss; 04.01.2016
comment
@MikeDolanFliss Извинения ... только что видел этот комментарий прямо сейчас. Да, у меня есть файл, который запускается каждые x минут, принимает новые данные, выполняет обратное геокодирование и добавляет их в другой набор данных. Я использовал функцию% over% в SP, как вы и предложили. Это казалось самым элегантным решением. - person Bogdan Rau; 18.05.2016

FWIW, вот одна простая альтернатива с использованием Google API:

library(ggmap)
res <- lapply(with(df, paste(lat, lon, sep = ",")), geocode, output = "more")
transform(df, city = sapply(res, "[[", "locality"))
# lat        lon          city
# 1 34.04838 -118.26616   los angeles
# 2 37.75784 -122.44103 san francisco
# 3 40.72986  -73.98792      new york
# 4 42.35639  -71.06231        boston
person lukeA    schedule 21.03.2015
comment
Спасибо, lukeA! Я видел эту опцию, хотя у меня есть сотни тысяч записей, поэтому gmaps меня очень быстро отключили. - person Bogdan Rau; 24.03.2015