我试图获得给定点和海岸之间的最小距离。我的例子是马德里到海岸的距离:
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()
返回的内容。文档说这是投影的单位。这是否意味着它是在纬度?如何将其转换为公里?
答案 0 :(得分:12)
gDistance(...)
返回作为参数提供的点和要素集之间的最小笛卡尔(欧几里德)距离。由于您的地图位于长/纬度坐标中,因此您可以获得“度”的距离,例如
d = sqrt {(long 1 - long 2 ) 2 +(lat 1 - lat < sub> 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
有+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。
最后,请注意您的海岸线文件具有世界上所有的海岸线,因此这是某些海岸线的最小距离,不一定是西班牙海岸(尽管在这种情况下它确实是在西班牙的北部海岸)。如果您的参考点非常靠近葡萄牙边境,那么最近的沿海点将是葡萄牙西海岸。