使用distGeo函数时出现经度相关错误,寻求问题原因
distGeo函数报错"longitude < -360"的排查方向
以下是几个可能的原因和解决思路:
变量顺序或对应关系错误:distGeo要求输入的坐标是**[经度, 纬度]**的顺序,检查代码里的
c(long,lat)和c(longitude,latitude)是不是严格对应了经纬度列,有没有把纬度和经度搞反的情况?如果误传了纬度当经度,哪怕数值范围正常,也可能触发函数的范围校验逻辑异常。存在未被发现的异常值:你提供的截图只展示了部分数据,可能有个别行的经度值确实小于-360(比如输入错误的-400这类数值),只是没出现在截图里。可以用以下代码排查:
# 检查经度列的极值 summary(zone$longitude) # 筛选出经度异常的行 filter(zone, longitude < -360)列类型错误:确认
long、lat、longitude、latitude这四列的类型都是数值型(numeric)。如果是字符型,转换为数值时可能出现异常值,触发报错。用str(zone)可以查看各列的类型。rowwise()的不必要使用:distGeo本身支持批量处理矩阵/数据框输入,不需要逐行用
rowwise()处理。试试简化代码:zone <- zone %>% mutate(distance = distGeo(cbind(long, lat), cbind(longitude, latitude))/1000)这种方式更高效,也能避免逐行处理时的变量引用问题。
内容的提问来源于stack exchange,提问作者Lili
相关产品推荐
相关产品推荐

