Rails 4 + Postgres。地理空间新手。很高兴接受涉及RGeo,Geokit,Geocoder或任何其他有助于解决此问题的宝石的解决方案。
模型包含两个字段latitude
和longitude
。
我有offset
属性,其中包含以米为单位的距离和orientation
属性,其中包含4个基本方向之一(N,E,W,S)。
实施例:
offset: 525.5 orientation: W
将offset
距离加到lat-long位置的标准方法是什么?为了给我一个新的lat-long对作为距离加法的结果?
答案 0 :(得分: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
答案 1 :(得分:0)
需要花一点时间进行挖掘,结果发现有一个奇异的库函数(考虑曲率,几何,投影,位置和数学假设),它有助于增加特定曲面位置的距离。
功能:ST_Project
在下面使用:
SELECT ST_AsGeoJSON(ST_Project('POINT(longitude latitude)'::geography, offset, radians(orientation)))
它来自PostGIS,因此可用于Ruby / Rails,虽然尚未作为本机Ruby对象(宝石尚未包装它),但作为PostGIS查询。
offset
以米为单位。 orientation
以度为单位('N'= 0,'E'= 90等)
希望这个解决方案可以帮助其他人寻找同样的事情。