从SpatialPolygons和其他sp类提取特征坐标 [英] Extract feature coordinates from SpatialPolygons and other sp classes

查看:146
本文介绍了从SpatialPolygons和其他sp类提取特征坐标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

sp 为不同的空间概念(点,线,面)提供了许多类。对于某些类别,访问要素坐标非常简单,例如 SpatialLines 。所有示例均来自相应的班级帮助页面。

Package sp provides a number of classes for different spatial concepts (points, lines, polygons). For some classes, accessing feature coordinates is straightforward, e.g. SpatialLines. All examples were taken from respective class help pages.

l1 = cbind(c(1,2,3),c(3,2,2))
l1a = cbind(l1[,1]+.05,l1[,2]+.05)
l2 = cbind(c(1,2,3),c(1,1.5,1))
Sl1 = Line(l1)
Sl1a = Line(l1a)
Sl2 = Line(l2)
S1 = Lines(list(Sl1, Sl1a), ID="a")
S2 = Lines(list(Sl2), ID="b")
Sl = SpatialLines(list(S1,S2))
coordinates(Sl)
# [prints a list of two with corresponding segments]

对于 SpatialPolygons coordinates()返回多边形中心,如下所示。

For SpatialPolygons, coordinates() returns polygon centers as demonstrated below.

Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)

Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)
coordinates(SpP)
         [,1]     [,2]
[1,] 2.696970 3.545455
[2,] 3.666667 2.333333
[3,] 6.133333 3.933333

常见软件包中是否有方便的函数可以提取特征坐标?我想出了一个用于 SpatialPolygons 的函数,但是我正在寻找经过更好测试并保持一致的东西,甚至在大多数/全部 sp 类。

Is there a handy function in common packages that would extract feature coordinates? I have come up with a function for SpatialPolygons, but I'm looking for something that has been better tested and is consistent, perhaps even across most/all sp classes.

getEdges <- function(x) {
    stopifnot(class(x) == "SpatialPolygons")
    lapply(x@polygons, function(y) {
                y@Polygons[[1]]@coords
            })
}
getEdges(SpP)
# [returns a list of three, coordinates in a matrix]


推荐答案

我能想到的最好方法是使用 ggplot2 fortify 函数c $ c>。 fortify 是一个通用函数,具有将通用R对象(例如 lm 等)转换为<$ c的方法。 $ c> data.frame ,其中 ggplot2 可用于绘图。完整列表给出:

The best way I can think of is to use the fortify function from ggplot2. fortify is a generic function which has methods to convert generic R objects (e.g. lm, etc) to a data.frame which ggplot2 can use for plotting. A full list gives:

> ggplot2:::fortify.
ggplot2:::fortify.cld                                                                   
ggplot2:::fortify.confint.glht                                                          
ggplot2:::fortify.data.frame                                                            
ggplot2:::fortify.default                                                               
ggplot2:::fortify.glht                                                                  
ggplot2:::fortify.Line
ggplot2:::fortify.Lines
ggplot2:::fortify.lm
ggplot2:::fortify.map
ggplot2:::fortify.NULL
ggplot2:::fortify.Polygon
ggplot2:::fortify.Polygons
ggplot2:::fortify.SpatialLinesDataFrame
ggplot2:::fortify.SpatialPolygons
ggplot2:::fortify.SpatialPolygonsDataFrame
ggplot2:::fortify.summary.glht

您可以看到其中包括了 SpatialPolygons * 对象的 fortify 函数。使用示例数据:

You can see this includes a fortify function for SpatialPolygons* objects. Using your example data:

> obj = fortify(SpP)
   long lat order  hole piece  group   id
1     2   2     1 FALSE     1   s1.1   s1
2     1   4     2 FALSE     1   s1.1   s1
3     4   5     3 FALSE     1   s1.1   s1
4     4   3     4 FALSE     1   s1.1   s1
5     2   2     5 FALSE     1   s1.1   s1
6     5   2     1 FALSE     1   s2.1   s2
7     2   2     2 FALSE     1   s2.1   s2
8     4   3     3 FALSE     1   s2.1   s2
9     5   2     4 FALSE     1   s2.1   s2
10    4   5     1 FALSE     1 s3/4.1 s3/4
11   10   5     2 FALSE     1 s3/4.1 s3/4
12    5   2     3 FALSE     1 s3/4.1 s3/4
13    4   3     4 FALSE     1 s3/4.1 s3/4
14    4   5     5 FALSE     1 s3/4.1 s3/4
15    5   4     6  TRUE     2 s3/4.2 s3/4
16    5   3     7  TRUE     2 s3/4.2 s3/4
17    6   3     8  TRUE     2 s3/4.2 s3/4
18    6   4     9  TRUE     2 s3/4.2 s3/4
19    5   4    10  TRUE     2 s3/4.2 s3/4

和plo计算结果:

require(ggplot2); theme_set(theme_bw())
ggplot(aes(x = long, y = lat, group = group), data = obj) + geom_path()

这篇关于从SpatialPolygons和其他sp类提取特征坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆