Построение сглаженной области на карте из набора точек в R - PullRequest
4 голосов
/ 05 августа 2010

как мне построить область вокруг набора точек на карте в R? например,

map('world')
map.axes()
p <- matrix(c(50, 50, 80, 100, 70, 40, 25, 60), ncol=2) # make some points
points(p, pch=19, col="red")

polygon(p, col="blue")

... что дает мне многоугольник с вершиной в каждой из точек, но это выглядит довольно глупо Есть ли способ «сгладить» многоугольник в какую-то кривую?

Ответы [ 2 ]

3 голосов
/ 05 августа 2010

Один из вариантов - сделать многоугольник ограниченным кривой Безье, используя функцию bezier в пакете Hmisc.Однако я не могу заставить начальную / конечную точку присоединиться аккуратно.Например:

## make some points
p <- matrix(c(50, 50, 80, 100, 70, 40, 25, 60), ncol=2)
## add the starting point to the end
p2 <- cbind(1:5,p[c(1:4,1),])
## linear interpolation between these points                            
t.coarse <- seq(1,5,0.05)
x.coarse <- approx(p2[,1],p2[,2],xout=t.coarse)$y
y.coarse <- approx(p2[,1],p2[,3],xout=t.coarse)$y
## create a Bezier curve                                           
library(Hmisc)
bz <- bezier(x.coarse,y.coarse)
library(maps)
map('world')
map.axes()
polygon(bz$x,bz$y, col=rgb(0,0,1,0.5),border=NA)
0 голосов
/ 05 августа 2010

Вот один из способов, нарисуйте многоугольник и сделайте его таким красивым, как вам нравится.Это действительно не имеет ничего общего с областями на картах, а больше о том, как вы генерируете вершины своего многоугольника.

    library(maps)
    p <- matrix(c(50, 50, 80, 100, 70, 40, 25, 60), ncol=2)     
    plot(p, pch = 16, col = "red", cex = 3, xlim = range(p[,1]) + c(-10,10), ylim = range(p[,2]) + c(-5, 5))
    map(add = TRUE)
    #click until happy, right-click "stop" to finish
    p <- locator(type = "l")
    map()
    polygon(cbind(p$x, p$y), col = "blue")

В противном случае вы могли бы интерполировать промежуточные вершины и как-то сглаживать их, а в контексте карты lon / lat можно использовать перепроектирование для получения более реалистичных отрезков линий - но это зависит от вашей цели.

...