Импортируем csv в R, распаковываем полигон и декодируем его с помощью пакетов googlePolylines - PullRequest
0 голосов
/ 26 марта 2020

Я пытался декодировать зашифрованные полигоны Google с помощью R, используя пакет googlePolylines, которого я добился, установив полигон в виде текста, но не могу выполнить ту же процедуру, импортировав файл csv с полигонами.

Например, у меня есть следующий код:

library(googlePolylines)
pol<-"j~thAxdvtMtXmL|LgCpKxCjQzD~T`GzXrAlMePnDsKpVoF`QgBnNoM~IcA`JiGnd@iYvZuLzKkSlH_d@wDef@iJwFyZfUmc@hCsa@N{\\|SeCzOaFgQwD{SaPiC|WwBpPr@bGsG{FeQxEkOtXa@dXgFtHyJoIiGui@NqaAvFuRyQxEia@he@u_@b\\og@dHuZyJaX_d@zK_Ua@eBwMq`A}AyRcTkKce@c]uWeS{DuRzZtCh]|b@zGuCbm@fUdTsLbS__@wBoTlu@zVbm@dc@l]oExn@gf@vUgPbAkL|HtCnXi@zKtRvc@CzPxBpLxAnEvFvDpPx^cFlBTh@??Dn@@f@~G|QFH~\\gMj@Su@}@"
polylines<-c(pol)
coordinates<-decode(polylines)

Это работает, но для этого я должен вручную изменить зашифрованный полигон. Что я хочу сделать, это импортировать CSV (datapolygons.csv) с зашифрованным полигоном (многоугольник столбца), а затем декодировать его. Я попытался с помощью следующего кода, но он выдает мне сообщение об ошибке.

datapolygons.csv (многоугольник записывается так же, как предыдущий закодированный многоугольник)

store_id | имя магазина | полигон

12345 | СЛУЧАЙНЫЙ | "j ~ thAxdvtMt XmL ....."

library(googlePolylines)
polyfile=read.table('datapolygon.csv', header=TRUE, sep=',')
pol<-levels(droplevels(polyfile$polygon))
polylines<-c(pol)
coordinates<-decode(polylines)

Сообщение об ошибке: Ошибка в rcpp_decode_polyline (полилинии, "координаты"): basic_string :: at: __n (что составляет 363)> = это -> size () (то есть 363)

Любая помощь будет принята с благодарностью. Спасибо!

1 Ответ

0 голосов
/ 26 марта 2020

Возможно ли, что строка повреждена в вашем файле .csv? Возможно, когда вы сделали data.frame для записи? Повреждение, кажется, происходит во время преобразования в factor().

У меня нет проблем с записью и обратно:

polyfile <- data.frame(store_address_id = 12345, 
                       store_name = "RANDOM",
                       polygon = "j~thAxdvtMtXmL|LgCpKxCjQzD~T`GzXrAlMePnDsKpVoF`QgBnNoM~IcA`JiGnd@iYvZuLzKkSlH_d@wDef@iJwFyZfUmc@hCsa@N{\\|SeCzOaFgQwD{SaPiC|WwBpPr@bGsG{FeQxEkOtXa@dXgFtHyJoIiGui@NqaAvFuRyQxEia@he@u_@b\\og@dHuZyJaX_d@zK_Ua@eBwMq`A}AyRcTkKce@c]uWeS{DuRzZtCh]|b@zGuCbm@fUdTsLbS__@wBoTlu@zVbm@dc@l]oExn@gf@vUgPbAkL|HtCnXi@zKtRvc@CzPxBpLxAnEvFvDpPx^cFlBTh@??Dn@@f@~G|QFH~\\gMj@Su@}@",
                       stringsAsFactors = FALSE)

write.csv(file="~/test.csv",polyfile)
polyfile2 <- read.table('~/test.csv', header=TRUE, sep=',',stringsAsFactors = FALSE)
decode(polyfile2$polygon)
[[1]]
         lat       lon
1  -12.07286 -76.95965
2  -12.07697 -76.95750
3  -12.07920 -76.95682
4  -12.08121 -76.95759
5  -12.08415 -76.95853
6  -12.08767 -76.95982
7  -12.09181 -76.96024
8  -12.09412 -76.95749
9  -12.09500 -76.95547
10 -12.09877 -76.95427
...