1

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

模型包含两个字段latitudelongitude

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

例子: offset: 525.5 orientation: W

将距离添加到 lat-long 位置的标准方法是什么offset,作为距离相加的结果,给我一个新的 lat-long 对?

4

2 回答 2

2

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

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

R * (lat1-lat2)= NorthSouth distance

其中R是地球半径(6335km)。

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

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
于 2013-11-20T10:08:40.397 回答
0

进行了一些挖掘,结果发现有一个奇异的库函数(考虑曲率、几何、投影、位置和数学假设)有助于增加特定表面位置的距离。

功能:ST_Project

下面使用:

SELECT ST_AsGeoJSON(ST_Project('POINT(longitude latitude)'::geography, offset, radians(orientation)))

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

offset以米为单位。orientation以度为单位('N'=0,'E'=90 等)

希望此解决方案可以帮助其他人寻找相同的东西。

于 2013-11-25T16:16:41.090 回答