2012-06-08 3 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) 

Это дает круг, где самая северная точка находится 205km к северу от центра и самая восточная точка находится 205km к востоку от центра.

+0

Для быстрого и грязного это может быть хорошо. Но считайте, что больший радиус «круги» не должен быть круглым. Альтернативным подходом может быть создание круга в координатах соответствующего проектора, а затем использование 'spTransform()' в пакете 'rgdal', чтобы вернуть его в longlat. – digitalmaps

Смежные вопросы