2012-06-08 3 views
2

지도 라이브러리를 사용하여 R로 매핑하는 일부 공간 데이터가 있습니다. 특히, 저는 미국지도에 원을 매핑하고 있습니다. 나는 위도/경도 중심 좌표와 각 원의 반경이 있고, 그래서처럼 매핑 오전 :지도 스케일링을 R로 유지 하시겠습니까?

library(maps) 
library(plotrix) 
map('state') 
draw.circle(x=-73.76275, y=41.04181, radius=2) 

이 특정 원은 205km의 반경이 필요합니다. 그래픽 창에서이 점을 정확하게 일치시킬 수 있었지만 png로 확대/축소하거나 내보내는 것은지도를 기준으로 원의 크기를 변경합니다.

a) 원의 크기를 자동화하고 b) 내 보내면 크기 조정을 유지할 수 있습니까?

+0

km까지의 위도와 경도의 매핑 범위는 약 111도 정도로 매우 쉽지만 경도 방향의 반경은 그렇게 쉽지 않습니다. 먼저 범위를 알아 내고 위도를 라디안으로 변환하고 205/cos (lat) * 111을 "x"방향의 반경으로 변환해야합니다. 당신이 그것을 처리하고 싶은 방법은 내 추측 이후로 yur 호출이 될 것입니다. 당신이 그것에 대해 완전히 정확하기보다는 평균을 취하게 될 것이라는 것입니다. –

답변

0

이 시도 :

map('state') 
x <- -73.76275 
y <- 41.04181 
radius <- 205 # in kilometers 
s <- seq(0,2*pi,length=1000) 
yradius <- optimize(interval=c(0,3),f=function(z){ 
    abs(pointDistance(c(x,y),c(x,y+z),longlat=T) - radius*1000)})$par 
xradius <- optimize(interval=c(0,3),f=function(z){ 
    abs(pointDistance(c(x,y),c(x+z,y),longlat=T) - radius*1000)})$par 
lines(cos(s)*xradius+x,sin(s)*yradius+y) 

북부 대부분의 지점이 중심 205km 북쪽과 동쪽 대부분의 지점이 중심 205km 동쪽 곳이 당신에게 원을 제공합니다.

+0

빠르면 더러울 수도 있습니다. 그러나 더 큰 반경 "원"이 원형이 아니어야한다고 생각하십시오. 또 다른 방법은 적절한 투영의 좌표에서 원을 생성 한 다음'rgdal' 패키지에서'spTransform()'을 사용하여 그것을 longlat으로 되 돌리는 것입니다. – digitalmaps