ruby-on-rails rgeo:点和线之间的距离计算

egdjgwm8  于 2023-04-22  发布在  Ruby
关注(0)|答案(1)|浏览(197)

我正在开发一个酒店应用程序(使用ruby on rails),我试图计算酒店和大海之间的距离。
我已经在geojson文件中收集了海岸线点的几何形状,现在我正在尝试使用rgeo gem计算距离。
我的调查结果如下:
当使用simple_mercator_factory时,我得到了一个错误的值,当使用spherical_factory时,两个点之间的距离是正确的,但是我计算点和线之间的距离产生了错误。
如何计算这个距离?

kpbpu008

kpbpu0081#

尝试使用geographic_factory,它使用球面计算,可以处理点到点和点到线的距离计算。

factory = RGeo::Geographic.spherical_factory(srid: 4326)

解析GeoJSON文件中的海岸线点,并使用geographic_factory将其转换为RGeo对象:

shoreline_geojson = File.read('path/to/your/geojson/file')
shoreline = RGeo::GeoJSON.decode(shoreline_geojson, json_parser: :json, geo_factory: factory)

使用geographic_factory为酒店位置创建RGeo点:

hotel_location = factory.point(hotel_longitude, hotel_latitude)

计算酒店位置和海岸线点之间的最小距离:

min_distance = shoreline.points.map { |point| hotel_location.distance(point) }.min

现在,min_distance将保存酒店与海岸线之间的最短距离(以米为单位)。
编辑:你需要添加rgeo-geojson

gem 'rgeo-geojson'
bundle install

相关问题