использование расстояний почтового индекса Google

У меня есть два списки почтовых индексов (в R)... один из детских адресов с их академическим счетом и одна из школ...

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

И затем я хотел бы иметь возможность составить заговор на Google, наносят на карту всех детей за школу... и видят, получают ли дети, которые живут ближе в школу, лучшие оценки..., возможно, готовить школы различный цвет детям и детям, имеющим градиент цвета согласно их счету?

возможно, что-то используя googleVis пакет?

так, например...

если у нас есть данные для 3 детей и 2 школ...

student.data <- cbind(post.codes=c("KA12 6QE", "SW1A 0AA", "WC1X 9NT"),score=c(23,58,88))
school.postcodes <- c("SL4 6DW", "SW13 9JT")

(N.B. Мои фактические данные, очевидно, значительно больше, чем один данный, таким образом, масштабируемость была бы полезна...),

что должно быть сделано с googleVis или каким-либо другим пакетом в этом отношении, чтобы быть в состоянии закончить вышеупомянутое?

11
nl ja de
Вы предполагаете, что у вас есть одна школа почтовым индексом?
добавлено автор agstudy, источник
да... каждая школа как всего один почтовый код.... that' s, каков school.postcodes объект...
добавлено автор h.l.m, источник

1 ответы

Я начал бы чем-то вроде этого получать lat/long

Получают lat/long для каждого почтового кода

library(XML)
school.postcodes <- c("KA12 6QE", "SW1A 0AA", "WC1X 9NT")
ll <- lapply(school.postcodes,
    function(str){
       u <- paste('http://maps.google.com/maps/api/geocode/xml?sensor=false&address=',str)
       doc <-  xmlTreeParse(u, useInternal=TRUE)
       lat=xpathApply(doc,'/GeocodeResponse/result/geometry/location/lat',xmlValue)[[1]]
       lng=xpathApply(doc,'/GeocodeResponse/result/geometry/location/lng',xmlValue)[[1]]
       c(code = str,lat = lat, lng = lng)
})
# get long/lat for the students
ll.students <- lapply(student.data$post.codes,
             function(str){
               u <- paste('http://maps.google.com/maps/api/geocode/xml?sensor=false&address=',str)
               doc <-  xmlTreeParse(u, useInternal=TRUE)
               lat=xpathApply(doc,'/GeocodeResponse/result/geometry/location/lat',xmlValue)[[1]]
               lng=xpathApply(doc,'/GeocodeResponse/result/geometry/location/lng',xmlValue)[[1]]
               c(code = str,lat = lat, lng = lng)
             })

ll <- do.call(rbind,ll)
ll.students <- do.call(rbind,ll.students)

do.call(rbind,ll)
      code         lat          lng         
[1,] "KA12%206QE" "55.6188429" "-4.6766226"
[2,] "SW1A%200AA" "51.5004864" "-0.1254664"
[3,] "WC1X%209NT" "51.5287992" "-0.1181098"

получают матрицу расстояния

library(RJSONIO)
dist.list <- lapply(seq(nrow(ll)),
                    function(id){
                      url <- paste("http://maps.googleapis.com/maps/api/distancematrix/json?origins=",
                                   ll[id,2],",",ll[id,3],
                                   "&destinations=",
                                   paste( ll.students[,2],ll.students[,3],sep=',',collapse='|'),
                                   "&sensor=false",sep ='')
                      res <- fromJSON(url)
                        hh <- sapply(res$rows[[1]]$elements,function(dest){
                          c(distance= as.numeric(dest$distance$value),
                                     duration = dest$duration$text)
                        })
                      hh <- rbind(hh,destination =  ll.students[,1])

                    })
names(dist.list) <- ll[,1]

dist.list
$`SL4 6DW`
            [,1]              [,2]      [,3]     
distance    "664698"          "36583"   "41967"  
duration    "6 hours 30 mins" "43 mins" "49 mins"
destination "1"               "2"       "3"      

$`SW13 9JT`
            [,1]              [,2]      [,3]     
distance    "682210"          "9476"    "13125"  
duration    "6 hours 39 mins" "22 mins" "27 mins"
destination "1"               "2"       "3"  
7
добавлено
@h.l.m является расстоянием в метре. Расстояние дано почтовым индексом.. если вы дадите правильный почтовый индекс, то il будет grive вы расстояние.
добавлено автор agstudy, источник
Какова единица измерения времени ПЧЕЛЫ по умолчанию?
добавлено автор Waldir Leoncio, источник
это выглядит большим... благодарит... Я знаю, что это - вероятно, мелочь, но значение расстояния..., в чем единица - это? и во-вторых есть ли способ получить расстояния между студенческим списком и его самой близкой школой, а не расстояние между студентами и другими студентами? кроме того, есть ли способ включить его в googleVis , чтобы видеть студентов с их отметками как один цвет и школы как другой?
добавлено автор h.l.m, источник
Спасибо за это... шанс получения кода для самой близкой школы для каждого студента? вместо расстояния между студентами?
добавлено автор h.l.m, источник