2012-06-08 81 views
2

我有一些使用地圖庫在R中繪製的空間數據。具體來說,我在美國地圖上繪製了圈子。我有緯度/經度中心座標和每個圓圈的半徑,和我像這樣它們映射:在R中保留地圖縮放嗎?

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

這個特殊的圈子需要205公里的半徑。我已經能夠在圖形窗口中進行匹配和精確繪圖,但縮放或導出爲png會更改與地圖相關的圓圈大小。

有什麼辦法可以:a)自動化圓圈大小,b)在導出時保留縮放比例?

+0

緯度到公里的映射範圍相當容易,大約爲111度,但經度方向的半徑不會那麼容易。首先需要計算出範圍,將度數轉換爲弧度,將205/cos(lat)* 111轉換爲「x」方向的半徑。如果你想處理這個問題,那麼你會打電話給你,因爲我的猜測是你最終會取平均值,而不是完全準確。 –

回答

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) 

這給你一個循環,即北方大部點爲中心的205公里北部和東部的最點是中心205公里東部。

+0

爲了快速和骯髒,這可能沒問題。但考慮到更大的半徑「圓圈」不應該是圓形的。另一種方法可能是在適當投影的座標中產生一個圓,然後使用'rgdal'包中的'spTransform()'將其恢復到longlat。 – digitalmaps