首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模拟埃菲尔铁塔周围的地理点

模拟埃菲尔铁塔周围的地理点
EN

Stack Overflow用户
提问于 2022-07-25 17:24:43
回答 1查看 79关注 0票数 1

埃菲尔铁塔的坐标为(经度: 48.8584°N,纬度: 2.2945°E)。我对随机产生100个点感兴趣,这些点位于埃菲尔铁塔半径12公里的范围内。换句话说,我想随机生成100对(经度,纬度),它们位于埃菲尔铁塔半径12公里的范围内。

根据这个问题(Simple calculations for working with lat/lon and km distance?),可以使用以下公式将经度和纬度转换为KM:

  • 纬度:1 deg = 110.574 km
  • 经度:1 deg =111.320*cos(纬度) km

因此,如果我想找出半径12公里的范围,相应的最大范围应该是:

  • 最大纬度范围: 12 * (1/110.574) =0.1085246
  • 最大经度范围: 111.320*cos(0.1085246) = 110.6651 -> 1/110.6651 = 0.009036273

使用这些信息,我试图模拟点并绘制它们:

代码语言:javascript
运行
复制
# for some reason, you have to call "long" as "lat" and vice versa - otherwise the points appear in the wrong locations all together 
id = 1:100
long = 2.2945 + rnorm( 100, 0.1085246 , 1)
lat = 48.8584 + rnorm( 100, 0.009036273 , 1)

my_data = data.frame(id, lat, long)

library(leaflet)
my_data %>% 
  leaflet() %>% 
  addTiles() %>% 
  addMarkers(clusterOption=markerClusterOptions())

但这些点并没有出现在埃菲尔铁塔附近--有些甚至在比利时!

我缩小了方差,现在点看起来更近了:

代码语言:javascript
运行
复制
# reduce variance
id = 1:100
long = 2.2945 + rnorm( 100, 0.1085246 , 0.01)
lat = 48.8584 + rnorm( 100, 0.009036273 , 0.01)

my_data = data.frame(id, lat, long)

library(leaflet)
my_data %>% 
  leaflet() %>% 
  addTiles() %>% 
  addMarkers(clusterOption=markerClusterOptions())

但这当然需要一些猜测工作和玩耍-理想情况下,我想要一个更“数学的方法”。

  • 有什么标准公式可以用来确保无论我选择哪个初始坐标(例如埃菲尔铁塔、自由女神像等),随机生成的点总是落在一定半径内?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-25 17:59:40

一种选择是使用sf包。函数st_buffer将允许您在起始点周围创建一个12公里的圆,而st_sample将允许您在该圆内选取100个随机点。

创建数据

代码语言:javascript
运行
复制
library(sf)
library(dplyr)

pt_sf <- data.frame(long = 2.2945, lat = 48.8584) %>%
  st_as_sf(coords = c("long", "lat"), crs = 4326)


buff <- pt_sf %>%
  st_buffer(dist = units::as_units(12, 'km'))

buff_sample <- st_sample(buff, 100)

图谋

代码语言:javascript
运行
复制
library(leaflet)

leaflet(pt_sf) %>% 
  addTiles() %>% 
  addCircleMarkers(color = 'red') %>%
  addPolygons(data = buff) %>%
  addMarkers(data = buff_sample, clusterOption=markerClusterOptions())

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73113132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档