【发布时间】:2021-01-01 06:34:51
【问题描述】:
在给定距离的情况下,是否有更好的方法可以在起点周围生成 N 个纬度/经度坐标?这是我的方法,但它不会创建均匀分布。
generate_gps_coordinates_in_circle<-function(start_lat,start_lon,max_distance_in_m,min_distance_in_m){
lat <- (start_lat * pi / 180) #center of the circle
lon <- (start_lon * pi / 180) #center of the circle
earth_radius <- 6371000
distance <- sqrt(runif(1, 0, 1) * (max_distance_in_m ** 2 - min_distance_in_m ** 2) + min_distance_in_m ** 2) #max and min distance from the center
delta_lat = cos(runif(1) * pi) * distance / earth_radius
sign = runif(1, 0, 2) * 2 - 1
delta_lon = sign * acos(((cos(distance/earth_radius) - cos(delta_lat)) / (cos(lat) * cos(delta_lat + lat))) + 1)
result <- c(lon = (lon + delta_lon) * 180 / pi, lat =(lat + delta_lat) * 180 / pi)
return(result)
}
【问题讨论】:
-
在正方形上创建均匀分布并排除距离起点大于
r的点会更容易吗? -
我认为这确实是一个概率问题而不是编程问题。困难在于球体上的圆圈与平面上的圆圈不同,例如如果距离是地球周长的一半,则边界的长度为零;它只是球体另一侧的点。
-
艾伦这也行!你能举个例子吗?
-
user2554330 嗯可能是。我用这个解决方案得到了一些“拉伸”的图片.. 即点不是以“圆形”分布的