3

我在这里有一组 945 个地理编码位置。每个位置都有一个 ID 和一个给定的人口:

"ID","LON","LAT","POPULATION"
1,86.648064,22.80682,386
2,86.65358,22.81848,655
3,86.670502,22.78508,624
4,86.685028,22.842409,708
5,86.716599,22.866791,987
6,86.734879,22.87911,415
7,86.736687,23.112619,715

我正在尝试计算每个位置 10 公里半径内所有村庄的总人口。

计算每个点的距离很简单:

coords = read.csv("filepath/coords.csv", header=T, stringsAsFactors=F)
coords.matrix = data.matrix(coords[,c(2,3)])

library(sp)
dist = list()
for(i in 1:nrow(coords.matrix)) {
  dist[[i]] = (spDistsN1(coords.matrix, coords.matrix[i,], longlat=T)) #See: http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/sp/html/spDistsN1.html
}
dist = do.call(rbind, dist)

这给了我这个945X945 矩阵。但是如何将这些单元格与 ID 和相应的群体相关联?

4

1 回答 1

3

假设dist矩阵在 KM 中具有距离,我认为您可以这样做:

coords$POPIN10KM <- sapply(1:nrow(dist),function(i)sum(coords$POPULATION[dist[i,]<10]))

这会在您的数据框中添加一列,指示 10 公里内的人口

于 2012-04-04T11:48:44.450 回答