gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:03:16 26 4
gpt4 key购买 nike

代码如下:

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)

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

如果将两个点靠得更近些,效果会更好......

最佳答案

这是因为 Web Mercator 不是保持距离的投影。 Leaflet 在 map 上画了一个几何圆,它没有找到与中心等距的点。投影向北延伸距离,因此北点位于几何圆之外。如果你尝试

  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)

关于R 和传单绘制的圆半径不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31600369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com