R语言sp包coordinates命令对SpatialPolygonsDataFrame的返回值解析
关于SpatialPolygonsDataFrame坐标与labpt的疑问解答
问题背景
我有一个用于描述物种分布的大型SpatialPolygonsDataFrame,包含4个代表不同分布区域(如繁殖区、越冬区)的主要要素,每个要素由多个不连续多边形组成。执行sp::coordinates(my_data)后得到四组坐标:
[,1] [,2] 0 58.03994 43.18015 1 73.65654 29.37278 2 52.59073 37.45488 3 68.26932 36.04832
我推测每组坐标对应一个要素,但有以下疑问:
- 这些坐标是否为某种质心?
- 它们和
SpatialPolygonsDataFrame中的标记坐标(labpt)完全相同,是sp包直接取用该值,还是从多边形计算而来? - 这些值是否始终落在对应要素的多边形内,还是可能落在多边形外?
解答
1. 坐标的本质:就是labpt标记点,非严格几何质心
sp::coordinates()对SpatialPolygonsDataFrame调用时,返回的就是每个要素(即每个Polygons对象)的labpt属性值,并非基于多边形形状计算的几何质心。
2. labpt的来源
labpt的取值逻辑分两种情况:
- 若创建
SpatialPolygons对象时手动指定了labpt参数,sp包直接沿用该值; - 若未手动指定,sp会默认计算该要素所有多边形的边界框(bbox)中心,将其设为labpt。
3. 是否始终落在多边形内部?
不一定:
- 当要素是单块连通多边形时,边界框中心大概率处于多边形内部;
- 但如果要素是不连续的多块多边形(比如你的物种分布区分散在多个区域),边界框是包裹所有多边形的最小矩形,它的中心很可能落在所有多边形之外的空白区域。
比如某个分布区包含东北、西北两块不相连的多边形,边界框会覆盖这两个区域,中心可能落在两块之间的无分布地带,完全不在任何一个多边形内。
补充:获取真正几何质心的方法
如果需要每个要素基于面积加权的几何质心(更符合“分布中心”的实际意义),可以使用rgeos::gCentroid()函数,它会考虑多边形的实际形状和面积,计算出的质心大概率落在多边形内部(极端凹多边形除外,这类情况在物种分布数据中很少见)。
内容的提问来源于stack exchange,提问作者Emily O'Connor
相关产品推荐
相关产品推荐

