gDistance(...)
возвращает минимальное декартовое (евклидово) расстояние между точкой и набором функций, представленными в качестве аргументов. Поскольку ваша карта находится в координатах long/lat, вы получаете расстояние в градусах, например.
д = SQRT {(длинный - длинные) + (лат - лат) }
, где долго и лат находятся в десятичной степени. Как уже отмечалось, это не значит, что переход на плоское расстояние (скажем, км) зависит от того, где вы находитесь. Поэтому нам необходимо преобразовать ваши данные в 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.
Наконец, обратите внимание, что ваш файл береговой линии имеет все береговые линии мира, так что это минимальное расстояние до около береговой линии, не обязательно испанского побережья (хотя в этом случае это оказывается на севере побережье Испании). Если бы ваш ориентир был очень близок к границе с Португалией, ближайшая прибрежная точка была бы на западном побережье Португалии.
Можете ли вы предоставить ссылку на свою карту? В начале введите 'proj4string (coast)', чтобы увидеть, что такое проекция. Если есть строка '+ units = ', то это единицы. – jlhoward
Карта, которую я использую, - это береговая линия от http://www.naturalearthdata.com/downloads/10m-physical-vectors/. 'proj4string (coast)' возвращает 'NA' – user525602
Вы посмотрели определение расстояния Хаусдорфа, связанного со страницы справки ?. Я понимаю, что этот ответ находится в «градусах», но я вовсе не убежден, что имеет смысл, поскольку количество километров в «градусе» колеблется от примерно 100 на экваторе до нуля на полюсах –