Создать точку по смещению в RGeo

Я пишу относительно простое приложение, в котором использую RGeo для расчета расстояний между точками на земном шаре. Я делаю это, используя RGeo::Geographic.spherical_factory.

Теперь я хочу иметь возможность создать новую точку, добавив смещение к существующей точке. Например, я хотел бы найти долготу и широту точки в 500 метрах к северу и в 200 метрах к востоку от существующей точки.

Как мне это сделать?


person Alex    schedule 29.01.2014    source источник


Ответы (1)


Возможно, это поможет:

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

Из Как переместить точку в Rgeo

person Seamus Abshere    schedule 11.07.2014
comment
Здесь чего-то не хватает? Я получаю ошибку неопределенного метода 'move_point'. Моя модель настроена как `set_rgeo_factory_for_column(:wpt, RGeo::Geographic.spherical_factory(:srid => 4326))` - person Jerome; 18.08.2015
comment
@ Джером прочитал весь ответ. move_point определяется в остальной части ответа. - person mkirk; 12.05.2016