简体   繁体   中英

Error in .pointsToMatrix(x) : longitude > 360 with calculating distance

Im trying to calculate the nearest distance to a point. Therefore I create two df's

Create list 1

long <- c(52.070498, 52.370216, 52.632381, 53.201233, 51.813298, 51.92442, 52.266075, 53.219383, 52.960561, 52.367027, 51.571915, 52.516775, 51.441642, 52.221537, 52.090737, 51.985103, 51.560596)
lat <- c(4.3007, 4.895168,4.753375, 5.799913, 4.690093, 4.477733, 6.155217, 6.566502, 5.920522, 6.668492, 4.768323, 6.083022, 5.469722, 6.893662, 5.12142, 5.89873, 5.091914)

stad <- c("Den Haag", "Amsterdam", "Alkmaar", "Leeuwarden", "Dordrecht", "Rotterdam", "Deventer", "Groningen", "Heerenveen", "Almelo", "Breda", "Zwolle", "Eindhoven", "Enschede", "Utrecht", "Arnhem", "Tilburg")
list1 <- data.frame(longitude=long, latitude=lat, stad)

Create list 2

long <- c("51.476364", "52.12379", "52.456954", "51.543197", "52.307687", "53.250184", "52.640436", "53.397875", "52.491691", "52.109272", "52.121092", "52.882946", "52.518537", "53.201233", "52.711559", "52.066719", "53.405366", "52.433881", "53.128855", "51.641078", "53.189226", "52.716927", "51.453667", "51.233528", "51.529207", "51.980632", "51.429248", "51.92442", "51.441642", "50.851368")
lat <- c("6.180948", "4.438598", "4.606014", "6.087664", "4.767424", "4.951427", "4.998517", "5.346679", "4.593325", "5.180968", "5.285347", "5.360707", "5.471422", "5.799913", "5.864559", "5.894033", "6.212048", "6.232888", "6.587567", "5.619458", "7.162511", "5.737644", "3.570912", "3.830322", "3.89688", "4.134185", "4.304708", "4.477733", "5.469722", "5.690973")
stad <- c("Valkenburg", "Voorschoten", "Ijmuiden", "De kooy", "Schiphol", "Vlieland", "Berkhout", "Hoorn (terschelling)", "Wijk aan zee", "De Bilt", "Soesterberg", "Stavoren", "Lelystad", "Leeuwarden", "Marknesse", "Deelen", "Lauwersoog", "Heino", "Eelde", "Hupsel", "Nieuwe beerta", "Twente", "Vlissingen", "Westdorpe", "Wilhelminadorp", "Hoek van Holland", "Woensdrecht", "Rotterdam", "Eindhoven", "Maastricht")
list2 <- data.frame(longitude=long, latitude=lat , stad)

But then when I do:

 library(geosphere)
 mat <- distm(list1[,c('longitude','latitude')], list2[,c('longitude','latitude')], fun=distVincentyEllipsoid)

I get:

Error in .pointsToMatrix(x) : longitude > 360
list1$locality <- list2$stad[apply(mat, 1, which.min)]

Apparently, the problem is that list2 contains factors instead of floats in longitude and latitude columns.

It seems to work once you convert factor values to numerical values specified by labels:

list2$longitude.fix <- as.numeric(levels(list2$longitude))[list2$longitude]
list2$latitude.fix <- as.numeric(levels(list2$latitude))[list2$latitude]
distm(list1[,c('longitude','latitude')], list2[,c('longitude.fix','latitude.fix')], fun=distVincentyEllipsoid)
           [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]      [,8]      …
 [1,] 218106.26  16356.00  54584.86 206073.80  57935.42 149371.56  99767.31 187239.60      …
 [2,] 173280.56  57416.26  33391.75 160587.51  15737.20  97796.65  32074.61 124403.87      …
 [3,] 203303.45  66306.56  25384.63 190634.04  36054.40  71943.23  27123.09 107285.19      …
 [4,] 195563.08 192179.83 155688.71 186323.20 151151.41  93985.73 108243.57  54651.40      …
 [5,] 169040.53  44278.35  72020.04 157421.51  55511.66 161989.79  97883.85 190131.21      …
 …

In your second list you have Strings.

long <- as.numeric(c("51.476364", "52.12379", "52.456954", "51.543197", "52.307687", "53.250184", "52.640436", "53.397875", "52.491691", "52.109272", "52.121092", "52.882946", "52.518537", "53.201233", "52.711559", "52.066719", "53.405366", "52.433881", "53.128855", "51.641078", "53.189226", "52.716927", "51.453667", "51.233528", "51.529207", "51.980632", "51.429248", "51.92442", "51.441642", "50.851368"))
lat <- as.numeric(c("6.180948", "4.438598", "4.606014", "6.087664", "4.767424", "4.951427", "4.998517", "5.346679", "4.593325", "5.180968", "5.285347", "5.360707", "5.471422", "5.799913", "5.864559", "5.894033", "6.212048", "6.232888", "6.587567", "5.619458", "7.162511", "5.737644", "3.570912", "3.830322", "3.89688", "4.134185", "4.304708", "4.477733", "5.469722", "5.690973"))
stad <- c("Valkenburg", "Voorschoten", "Ijmuiden", "De kooy", "Schiphol", "Vlieland", "Berkhout", "Hoorn (terschelling)", "Wijk aan zee", "De Bilt", "Soesterberg", "Stavoren", "Lelystad", "Leeuwarden", "Marknesse", "Deelen", "Lauwersoog", "Heino", "Eelde", "Hupsel", "Nieuwe beerta", "Twente", "Vlissingen", "Westdorpe", "Wilhelminadorp", "Hoek van Holland", "Woensdrecht", "Rotterdam", "Eindhoven", "Maastricht")
list2 <- data.frame(longitude=long, latitude=lat , star)

or you just remove the quotes

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM