에 greatcircle 연결 맵을 재현하려고 할 때 문제가 있습니다. 함수에 대한 루프를 실행할 때 나는 다음과 같은 오류가 발생하고있다 : 그것은 루프의 외부에있을 때R - greatcircles을 만들 때 if (antipodal (p1, p2)) - 라이브러리 (지리권)
Error in if (antipodal(p1, p2)) { : missing value where TRUE/FALSE needed
또한, 함수가 확인 실행을,하지만 난 루프의 설정에 어떤 문제가 있는지 볼 수 없습니다 문제를 일으킬 수 있습니다.
이 오류는이 방법으로 데이터를 표시 할 때 발생하는 일반적인 문제인 것으로 보이며 NULL 값이 반주에 전달되는 것과 관련이 있습니다. 그 데이터가 내 데이터에있을 수 있음을 발견하는 데 어려움이 있습니다. 나는 'to'와 'from'목적지를 제거했습니다. 동일한 목적지/오버레이는 큰 원으로 그려지는 0 거리가 될 수 있습니다. 즉 SO 여기에 유사한 오류에 문제가있는 것으로보고되었다 :
Antipodal error in Great Circles code
원래 코드는 gcIntermediate의 테이블을 조립하는 SQL 쿼리를 사용하지만 사람이 실행하고 싶은 경우에 나는 테이블로 다음을 작성했습니다 코드를보고 스스로 알아보십시오.
library(maptools)
library(rgeos)
library(sp)
library(geosphere)
fsub = read.csv("fsub.csv")
dfCord = read.csv("dfCord.csv")
dfBind = cbind(as.numeric(dfCord$lon), as.numeric(dfCord$lat))
sp = SpatialPoints(dfBind)
plot(sp)
for (j in 1:length(fsub$MODE9)) {
air1 <- dfCord[dfCord$sa2_main11 == fsub[j,]$O_SA2_11,]
air2 <- dfCord[dfCord$sa2_main11 == fsub[j,]$D_SA2_11,]
inter <- gcIntermediate(c(as.integer(air1[1,]$lon), as.integer(air1[1,]$lat)), c(as.integer(air2[1,]$lon), as.integer(air2[1,]$lat)), n=100, addStartEnd=TRUE)
lines(inter, col="black")
}
데이터 파일은 GIT에서 찾을 수 있습니다.
dfCord.csv fsub.csv
https://github.com/GaryPate/R-Greatcircles/commit/e1149ccdb7ab13b89f5f11e8ebad66f26ec3e39b
많은 감사합니다!
추적 코드 42 주셔서 감사합니다. 마지막으로 해결 된이 문제를보고하고자합니다. 루프가 실패하는 데는 두 가지 이유가 있습니다. 문자열 시퀀스를 as.numeric 대신 as.integer로 변환하고있었습니다. 이로 인해 위의 긴 점이 잘리고 오버레이되어 큰 원을 그리는 데 null 거리가 발생했습니다. 또 다른 이유는 내 SQL 쿼리가 충분히 엄격하지 않아서 위의 긴 테이블에 존재하지 않는 대상 지점을 포함하고 있기 때문입니다. 결국 큰 신비가 없습니다. 데이터 항목이 누락되었습니다. – Praxis
답변을 찾는데 도움이된다면 유용한 응답을 upvoting하는 것이 좋습니다. 다른 사람들이 우리의 노력을 통해 배울 수 있도록 실제 답변을 게시하고 적절한 간격을두고 체크 표시 할 수도 있습니다. –