gDistance(...)
返回给定点和要素集之间的最小笛卡尔(欧几里得)距离。由于您的地图是经纬度坐标,因此获得的距离为“度数”,例如:
d = sqrt { (long1 - long2)2 + (lat1 - lat2)2 }
其中long和lat以十进制度表示。正如所指出的那样,这并没有多大意义,因为将其转换为平面距离(例如,公里)取决于您所在的位置。因此,我们需要将数据转换为在感兴趣区域内近似平面的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)
coast.proj <- spTransform(coast,CRS(epsg.2062))
MAD.proj <- spTransform(MAD,CRS(epsg.2062))
gDistance(MAD.proj,coast.proj)
因此,最小距离为约305.2公里。
最后,请注意您的海岸线文件包含世界上所有海岸线,因此这是到达某些海岸线的最小距离,不一定是西班牙海岸(尽管在这种情况下,它确实位于西班牙北部海岸)。如果您的参考点非常接近与葡萄牙的边界,则最近的海岸点将位于葡萄牙西海岸。
proj4string(coast)
来查看投影方式。如果有一个+units='
字符串,那么这些就是单位。 - jlhoward