and*_*ndy 7 ruby google-maps coordinates ruby-on-rails-3 gtfs
背景:
我正在使用运输路线,谷歌提供足够远的路线点来创造"形状".这些是您在Google地图中看到的巴士/火车路线.
我的要求:
谷歌的积分远远不足以创造直线.但是我想要一个点,比方说,5米.
问题:
所以,说我有两点[lat,long]:
[-33.8824219918503,151.206686052582]和[-33.8815434600467,151.206556440037]
鉴于这两点,我可以计算它们之间的距离.说为了争论它是1公里.
所以我们可以想象这两点之间的假想直线.
如何为每个(例如5米)生成该虚线的坐标?
Ste*_*fan 10
目的地点给定距离和从起点应用到您的问题的方位:
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, ?1, ?, d) }
markers = waypoints.map { |?, ?| "#{?.to_deg},#{?.to_deg}" }.join("|")
puts "http://maps.googleapis.com/maps/api/staticmap?size=640x320&sensor=false&markers=#{markers}"
Run Code Online (Sandbox Code Playgroud)
每隔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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4072 次 |
| 最近记录: |