我试图获得给定点和海岸之间的最小距离.我的例子是马德里到海岸的距离:
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
Run Code Online (Sandbox Code Playgroud)
我无法理解gDistance()返回的内容.文档说这是投影的单位.这是否意味着它是在纬度?我该如何将其转换为公里?
jlh*_*ard 12
gDistance(...)返回作为参数提供的点和要素集之间的最小笛卡尔(欧几里德)距离.由于地图是长/纬度坐标,因此您可以获得"度"的距离,例如
d = sqrt {(长1 - 长2)2 +(lat 1 - lat 2)2 }
其中long和lat是十进制度数.正如所指出的,这并不意味着很多,因为转换到平面距离(比如km)取决于你所处的位置.因此,我们需要将您的数据转换为CRS,该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
Run Code Online (Sandbox Code Playgroud)
有+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
Run Code Online (Sandbox Code Playgroud)
所以最小距离约为305.2km.
最后,请注意您的海岸线文件具有世界上所有的海岸线,因此这是到一些海岸线的最小距离,不一定是西班牙海岸(尽管在这种情况下它确实在西班牙的北部海岸).如果您的参考点非常靠近葡萄牙边境,那么最近的海岸点将是葡萄牙的西海岸.