R和传单是否绘制了不正确的圆半径?

时间:2015-07-24 00:38:18

标签: r leaflet

以下是代码:

library(leaflet)
library(geosphere)

startLoc <- c(-100, 45) #Long/Lat
endLoc <- c(-100, 42) #Long/Lat

totalDist <- distHaversine(startLoc, endLoc)


leaflet() %>%
  addTiles() %>%  # Add default OpenStreetMap map tiles
  addMarkers(lng=c(startLoc[1],endLoc[1]), lat=c(startLoc[2], endLoc[2]), popup  = paste(totalDist)) %>%
  addCircles(lng = endLoc[1], lat = endLoc[2], radius = totalDist)

如您所见,顶点不包含在圆圈中。我认为这是因为&#34;添加圈子&#34;没有考虑到地球的曲率?这是对的吗?

如果你将两个点靠近在一起,那就更好了......

1 个答案:

答案 0 :(得分:1)

这是因为Web Mercator不是保留距离的投影。 Leaflet在地图上绘制一个几何圆,它没有找到与中心等距的点。当您向北移动时,投影会拉伸距离,因此北点位于几何圆之外。如果你试试

  startLoc <- c(-103, 42) #Long/Lat
  endLoc <- c(-100, 42) #Long/Lat

然后左手点在圆圈上;如果您反转原始点,则较低点位于圆圈内。

试试这个:

library(geosphere)
library(plyr)
startLoc <- c(-100, 45) #Long/Lat
endLoc <- c(-100, 42) #Long/Lat

totalDist <- distHaversine(startLoc, endLoc)

points = ldply(1:360, function(angle) destPoint(endLoc, angle, totalDist))
leaflet() %>%
  addTiles() %>%  # Add default OpenStreetMap map tiles
  addMarkers(lng=c(startLoc[1],endLoc[1]), lat=c(startLoc[2], endLoc[2]), popup  = paste(totalDist)) %>%
  addPolygons(lng = points$lon, lat = points$lat)