如何计算多边形的地理距离?

时间:2011-12-20 18:07:11

标签: r geospatial

我有一个包含50多种不同多边形形状(代表50多个不同区域)的形状文件,以及应该存在于其中一个区域中的10,000多个数据点。问题是,10,000多个点已经用它们应该存在的区域编码,我想知道它们与地理空间距离中这个编码区域的距离。

我当前的方法(下面的代码),包括将shapefile转换为owin库中的sp个对象并使用distfun获取我在lat,long euclidean空间中的距离。但我想获得地理空间距离(最终转换为km)。我应该去哪儿?

#basically cribbed from http://cran.r-project.org/web/packages/spatstat/vignettes/shapefiles.pdf (page 9)
shp <- readShapeSpatial("myShapeFile.shp", proj4string=CRS("+proj=longlat +datum=WGS84"))
regions <- lapply(slot(shp, "polygons"), function(x) SpatialPolygons(list(x)))
windows <- lapply(regions, as.owin)

# need to convert this to geo distance
distance_from_region <- function(regionData, regionName) {
    w <- windows[[regionName]]
    regionData$dists <- distfun(w)(regionData$lat, regionData$long)
    regionData
}   

1 个答案:

答案 0 :(得分:3)

我将数据投射到欧几里得(或欧几里德附近)坐标系 - 除非你跨越地球的一大块,否则这是可行的。使用maptools或sp或rgdal中的spTransform(我忘记了)并转换为数据附近的UTM区域。

使用包rgeos和gDistance函数也可能做得更好:

 gDistance by default returns the cartesian minimum distance
 between the two geometries in the units of the current projection.

如果你的数据超过了一大块地球,那么......很棘手...... 42 ......

百里