【问题标题】:R and leaflet plot an incorrect circle radius?R和传单绘制不正确的圆半径?
【发布时间】:2015-11-11 09:53:53
【问题描述】:

代码如下:

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)

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

如果你把两个点放在一起比较好...

【问题讨论】:

    标签: r leaflet


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 2014-02-28
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多