以下是代码:
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;没有考虑到地球的曲率?这是对的吗?
如果你将两个点靠近在一起,那就更好了......
答案 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)