r - 计算点与海岸之间的最小距离

标签 r gis spatial

我正在尝试获得给定点与海岸之间的最小距离。我的例子是马德里到海岸的距离:

library(rgeos)
library(maptools)
coast <- readShapeLines("Natural_Earth_quick_start/10m_physical/ne_10m_coastline.shp")
MAD = readWKT("POINT(-3.716667 40.383333)")
gDistance(MAD,coast)
[1] 3.021808

我无法理解gDistance()返回的内容。文档说它是以投影为单位的。这是否意味着它是拉特隆度的?如何将其转换为公里?

最佳答案

gDistance(...)返回点和作为参数提供的要素集之间的最小笛卡尔(欧几里得)距离。由于您的 map 是在长/纬度坐标中,因此您获得的距离以“度”为单位,例如

d = sqrt { (long1 - long2)2 + (lat1 - lat2)2 }



其中long和lat以十进制度数表示。如前所述,这并不意味着什么,因为转换为平面距离(例如km)取决于您所在的位置。因此,我们需要将您的数据转换为在感兴趣区域中大致为平面的CRS。事实证明,适用于西类牙的CRS是EPSG-2062。 EPSG-2062的投影字符串为:
+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs 

具有+units=m(米)。因此,我们需要将点(MAD)和边界重新投影到EPSG-2062。
library(rgeos)
library(maptools)

epsg.2062 <- "+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs"
wgs.84    <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"

coast <- readShapeLines("ne_10m_coastline",CRS(wgs.84))
MAD   <- readWKT("POINT(-3.716667 40.383333)",p4s=CRS(wgs.84))
gDistance(MAD,coast)            # WGS-84 (long/lat) projection, units in "degrees"
# [1] 3.021808

coast.proj <- spTransform(coast,CRS(epsg.2062))
MAD.proj   <- spTransform(MAD,CRS(epsg.2062))
gDistance(MAD.proj,coast.proj)  #EPSG-2062 projection, units are in meters.
# [1] 305171.2

因此,最小距离为〜305.2km。

最后,请注意,您的海岸线文件包含世界上所有的海岸线,因此这是到某些海岸线(不一定是西类牙海岸)的最小距离(尽管在这种情况下,它确实位于西类牙的北海岸)。如果您的引用点非常靠近葡萄牙的边界,则最近的沿海点将是葡萄牙的西海岸。

关于r - 计算点与海岸之间的最小距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21295302/

相关文章:

python - 升级到 OSX El Capitan 后出现 rpy2 错误

r - 如何在 R 中正确投影和绘制光栅

python - 为使用 rasterio 读取的文件设置 CRS

javascript - 使用 ArcGis Api For Javascript 将经度和纬度转换为 X Y 坐标

r - 如何将 ntree 参数强加到 caret 包的 train() 函数中?

r - R 中的这个正则表达式模式有什么问题?

mysql - 获取与给定点周围的圆相交的所有多边形

algorithm - 用于计算社区(互连节点)到另一个点之间的距离的有效算法

r - 修改多面图中的图例,ggplot2

r - 从数据框中查找到特定位置最近的城市