Ruby on rails 4 将距离添加到特定纬度/经度位置

Ruby on rails 4 将距离添加到特定纬度/经度位置,ruby-on-rails-4,postgis,rails-geocoder,geokit,rgeo,Ruby On Rails 4,Postgis,Rails Geocoder,Geokit,Rgeo,Rails 4+Postgres。地理空间新概念。乐于接受涉及RGeo、Geokit、Geocoder或任何其他有助于解决此问题的gem的解决方案 模型包含两个字段纬度和经度 我有一个offset属性,它包含以米为单位的距离,还有一个orientation属性,它包含4个基本方向(N、E、W、S)中的一个 例如: 偏移量:525.5方向:W 将偏移量距离添加到lat long位置的标准方法是什么,以作为距离添加的结果给我一个新的lat long对?对于小偏移量,例如几百米: 您可以处理N&S

Rails 4+Postgres。地理空间新概念。乐于接受涉及RGeo、Geokit、Geocoder或任何其他有助于解决此问题的gem的解决方案

模型包含两个字段
纬度
经度

我有一个
offset
属性,它包含以米为单位的距离,还有一个
orientation
属性,它包含4个基本方向(N、E、W、S)中的一个

例如:

偏移量:525.5方向:W


偏移量
距离添加到lat long位置的标准方法是什么,以作为距离添加的结果给我一个新的lat long对?

对于小偏移量,例如几百米:

您可以处理N&S方向,知道:

R * (lat1-lat2)= NorthSouth distance
R * cos(lat)* (lon1-lon2) = EastWest distance.
其中R是地球半径(6335km)

您可以处理E&W方向,知道:

R * (lat1-lat2)= NorthSouth distance
R * cos(lat)* (lon1-lon2) = EastWest distance.
对不起,我不会说Ruby,但是翻译这个伪代码应该很容易:

R=6335000         // This is in metres
PI=3.14159265     // Your compiler may have a better constant/macro
if(orientation is North or orientation is South)
  x = offset * 180 / (PI * R)
  if(orientation is South)
     x = -x
  endif
  newLatitude = latitude + x
else
  x = offset * 180 / (PI * R * cos(lat))
  if(orientation is West)
     x = -x
  endif
  newLongitude = longitude + x
endif

这需要一点挖掘,结果发现有一个奇异的ish库函数(考虑曲率、几何、投影、位置和数学假设),可以帮助增加到特定曲面位置的距离

功能:
ST_项目

使用方法如下:


选择ST_AsGeoJSON(ST_项目(“点(经纬度)”::地理、偏移、弧度(方向)))

它来自PostGIS,因此可以在Ruby/Rails中使用,尽管还不是原生Ruby对象(gems还没有包装它),而是作为PostGIS查询

偏移量
以米为单位<代码>方向以度为单位('N'=0,'E'=90等)


希望这个解决方案能帮助其他人寻找同样的东西。

这是一个几何相关的问题。很难在stackoverflow上安装它。啊。。。我希望通过使用良好的GIS ruby gems实现,而不是解决方案背后的数学。这有助于/解决您的问题吗?如果可以的话,你能接受吗?或者说它有什么问题,这样我可以进一步帮助你?嗨,马克。。。我认为您的解决方案可以在您定义的假设(偏移量大小等)内工作,但由于这些假设,我没有尝试。我发现那些编写过PostGIS、RGeo等库的人解释了一般的精确性,我总是更喜欢借助他们的专业知识,而不是手工假设。不过,这个解决方案似乎是合理的!