我正在编写一个相对简单的应用程序,其中我使用 RGeo 来计算地球上各点之间的距离。我正在使用RGeo::Geographic.spherical_factory
.
现在我希望能够通过向现有点添加偏移量来创建新点。例如,我希望能够找到现有点以北 500 米和以东 200 米的点的经度和纬度。
我该怎么做呢?
也许这有帮助:
a = move_point(-72.4861, 44.1853, 0, 0) # POINT (-72.4861 44.18529999999999)
b = move_point(-72.4861, 44.1853, 100, 0) # POINT (-72.48520168471588 44.18529999999999)
c = move_point(-72.4861, 44.1853, 0, 100) # POINT (-72.4861 44.18594416889434)
puts a.distance(b)
puts a.distance(c)
这给了你
99.99999999906868
99.99999999906868
注意:我不确定RGeo::Geographic.simple_mercator_factory
和RGeo::Geographic.spherical_factory
会在这里有什么不同。
require 'rgeo'
def move_point(lon, lat, x_offset_meters, y_offset_meters)
wgs84 = RGeo::Geographic.simple_mercator_factory.point(lon, lat)
wgs84_factory = wgs84.factory
webmercator = wgs84_factory.project wgs84
webmercator_factory = webmercator.factory
webmercator_moved = webmercator_factory.point(webmercator.x+x_offset_meters, webmercator.y+y_offset_meters)
wgs84_factory.unproject webmercator_moved
end