我是R的新手,我想做一个密度分布图。我想用rgal
计算R中行政边界的人口密度:
path <- "recintos_municipales_inspire_peninbal_etrs89.shp"
lineas_limite <- readOGR(path, use_iconv=TRUE, encoding = "UTF-8")
我看到了rgal
如何创建一个数据结构,在这个数据结构中,我可以通过lineas_limite@data
轻松访问shapefile
属性表,通过lineas_limite@polygons
轻松访问多边形。
我在lineas_limite@data
中有一个名为population
的字段,我想将其用作QGIS中可用的本地变量,如$area
。
然后我想创建一个新的density
变量来在choropleth map中表示它:
coast@data <- coast@data %>%
mutate(
dens = population / area
)
这是最好的做法吗?
数据来自西班牙国家地理研究所(link来源)。
数据集名称为市域边界线,平台会下载几个文件,我正在处理的是recintos_provinciales_inspire_peninbal_etrs89
。
另一方面,我已经用shapefile创建了一个GitHub repo,但是它们已经有了一个面积字段,这是我感兴趣的,也是我用QGIS创建的(所以不要注意,因为我试图从R生成它)。
先谢谢你!
1条答案
按热度按时间mepcadol1#
概述
要计算每个多边形的面积,您需要做两件事:
1.存储每个多边形的边界(此处显示为77个矩阵的列表)
1.使用
geosphere::areaPolygon()
函数计算并存储每个多边形的面积。从那里,您可以继续计算每个多边形的人口密度。
可复制示例
下面是计算每个City of Chicago's 77 community areas(即邻域)的面积的示例。
不信任每个多边形内的继承'area'槽
根据
?sp::Polygons-class
的文档,每个多边形中的area
插槽不是实际面积。类“numeric”的对象;“多边形”列表的总平面面积,但不包括重复计数的孔(从0.9更改为58 -岛被求和,孔被忽略而不是减去);这些值用于确保在较大区域的多边形之后绘制较小区域的多边形,不考虑投影,因为此类对象没有定义投影。
它看起来更像是一个占位符,而不是您正在寻找的实际值,这就是为什么我使用
geosphere::areaPolygon()
函数来获得该值的原因。更新
OP的数据通过GitHub repository提供。下面是与上面相同的逻辑,只是使用不同的数据。
资源
我鼓励您阅读
?sp::Polygons-class
文档以及SpatialPointsDataFrame properties and operators in R,以了解更多关于空间多边形以及如何在R中使用它们。会话信息
RStudio版本