RDSTK: Обратно геокодиране на ширина/дължина към град (с помощта на координати2политика)

Работя върху приложение 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, въпреки че изглежда не мога да го проектирам отново за koordinate2politics.

Някакви данни?


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


Отговори (2)


Звучи готино. Напоследък имах проблеми с RDSTK... Предполагам, че стоковият сървър вече не работи за вас , както е описано в блога на автора. Много лошо.

Ето две заобиколни решения. Може да успеете да вземете оригиналните двойки ширина/дължина, като използвате файла с градски места от tigerfile и да използвате %over% в пакета sp и след това да изтеглите името от върнатата форма. Това трябва да е по-бързо от многократните извиквания към API.

Въпреки това имам същата нужда от отворен геокодер в R и има няколко опции. Вижте ggmap, посочен в отговора на LukeA - може да използва DSTK (вече несъществуващ) и е прост интерфейс към API на google само за няколко извиквания. Вижте също тази фантастична публикация, описваща как да използвате API за геокодиране на бюрото за преброяване. Напишете малка функция за обвивка, която да обработва JSON и сте готови. Този код работи за мен от 1/1/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, ето една проста алтернатива, използваща API на Google:

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