.pointsToMatrix(x)中的错误:经度>360计算距离 [英] Error in .pointsToMatrix(x) : longitude > 360 with calculating distance

查看:63
本文介绍了.pointsToMatrix(x)中的错误:经度>360计算距离的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试计算到一个点的最近距离.因此,我创建了两个df

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

创建列表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)

创建列表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)

但是当我这样做时:

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

我得到:

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

推荐答案

显然,问题在于 list2 包含因子,而不是经度纬度中的浮点数列.

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      …
 …

这篇关于.pointsToMatrix(x)中的错误:经度&gt;360计算距离的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆