加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何在两个已知点之间生成坐标

发布时间:2020-12-17 04:26:23 所属栏目:百科 来源:网络整理
导读:背景: 我正在使用运输路线,谷歌提供足够远的路线点来创造“形状”.这些是您在Google地图中看到的巴士/火车路线. 我的要求: 谷歌的积分远远不足以创造直线.但是我想要一个点,比方说,5米. 问题: 所以,说我有两点[lat,long]: [-33.8824219918503,151.206686
背景:

我正在使用运输路线,谷歌提供足够远的路线点来创造“形状”.这些是您在Google地图中看到的巴士/火车路线.

我的要求:

谷歌的积分远远不足以创造直线.但是我想要一个点,比方说,5米.

问题:

所以,说我有两点[lat,long]:

[-33.8824219918503,151.206686052582]和[-33.8815434600467,151.206556440037]

鉴于这两点,我可以计算它们之间的距离.说为了争论它是1公里.

所以我们可以想象在这两点之间有一条假想的直线.

如何为每个(例如5米)生成该假想线的坐标?

解决方法

Destination point given distance and bearing from start point适用于您的问题:
class Numeric
  def to_rad
    self * Math::PI / 180
  end
  def to_deg
    self * 180 / Math::PI
  end
end

include Math

R = 6371.0

def waypoint(φ1,λ1,θ,d)
  φ2 = asin( sin(φ1) * cos(d/R) + cos(φ1) * sin(d/R) * cos(θ) )
  λ2 = λ1 + atan2( sin(θ) * sin(d/R) * cos(φ1),cos(d/R) - sin(φ1) * sin(φ2) )
  λ2 = (λ2 + 3 * Math::PI) % (2 * Math::PI) - Math::PI # normalise to -180..+180°
  [φ2,λ2]
end

φ1,λ1 = -33.to_rad,-71.6.to_rad   # Valparaíso
φ2,λ2 = 31.4.to_rad,121.8.to_rad  # Shanghai

d = R * acos( sin(φ1) * sin(φ2) + cos(φ1) * cos(φ2) * cos(λ2 - λ1) )
θ = atan2( sin(λ2 - λ1) * cos(φ2),cos(φ1) * sin(φ2) - sin(φ1) * cos(φ2) * cos(λ2 - λ1) )

waypoints = (0..d).step(2000).map { |d| waypoint(φ1,d) }

markers = waypoints.map { |φ,λ| "#{φ.to_deg},#{λ.to_deg}" }.join("|")

puts "http://maps.googleapis.com/maps/api/staticmap?size=640x320&sensor=false&markers=#{markers}"

每隔2,000公里生成一个谷歌静态地图链接,其中包括从瓦尔帕莱索到上海的航点:

http://maps.googleapis.com/maps/api/staticmap?size=640x320&sensor=false&markers=-33.0,-71.60000000000002|-32.54414813683714,-93.02142653011552|-28.59922979115139,-113.43958859125276|-21.877555679819015,-131.91586675556778|-13.305784544363858,-148.5297601858932|-3.7370081151180683,-163.94988578467394|6.094273692291354,-179.03345538133888|15.493534924596633,165.33401731030006|23.70233917422386,148.3186618914762|29.83806632244171,129.34766276764626

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读