【问题标题】:How to calculate geo-distance from a polygon?如何计算多边形的地理距离?
【发布时间】:2011-12-20 18:07:10
【问题描述】:

我有一个 shapefile,其中包含 50 多个不同的多边形形状(代表 50 多个不同的区域)和 10,000 多个应该存在于其中一个区域中的数据点。问题是,这 10,000 多个点已经用它们应该在的区域进行编码,我想弄清楚它们在地理空间距离上与这个编码区域的距离。

我当前的方法(下面的代码),包括将 shapefile 转换为 sp 库中的 owin 对象,并使用 distfun 让我在 lat、long 欧几里得空间中获得距离。但我想获得地理空间距离(最终转换为公里)。接下来我应该去哪里?

#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
}   

【问题讨论】:

  • 在 sp 中尝试 spDistsN1,longlat = TRUE
  • @mdsummer:spDistsN1 计算两点之间的距离。我需要从多边形到点的距离。如何进行转换对我来说并不是很明显......
  • 多边形的哪个坐标?质心或某个选定的边界点(最近的?),还是所有的边界点?您的问题对此不清楚。 spDists/spDistsN1 在不选择地图投影的情况下提供了点集之间(不仅仅是两个点之间)所需的大圆距离,因此一旦提取了正确的坐标或摘要,我最终将使用它 - 你能澄清这个问题吗?
  • 对不起,我假设与多边形的距离暗示最小距离 = 从点到多边形上最近点的距离。我想我可以做从给定点到多边形中所有边界点的距离,然后取最小值……似乎有点低效,但我想是可行的。在此期间将寻找更好的解决方案。

标签: r geospatial


【解决方案1】:

我会将数据投影到欧几里得(或接近欧几里得)坐标系 - 除非您跨越地球的大部分区域,否则这是可行的。使用 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...

巴里

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2017-02-21
    相关资源
    最近更新 更多