Как определить, находится ли пара широта/долгота внутри многоугольника шейп-файла

Я использую драгоценные камни rgeo и rgeo-shapefile в своем приложении Rails 5. Моя цель — загрузить шейп-файл окрестностей и определить, в какой окрестности находится точка широты/долготы.

В их документации у них есть этот пример.

require 'rgeo/shapefile'
name = "neighborhoods.shp"
RGeo::Shapefile::Reader.open(name) do |file|
  puts "File contains #{file.num_records} records."
  file.each do |record|
    puts "Record number #{record.index}:"
    puts "  Geometry: #{record.geometry.as_text}"
    puts "  Attributes: #{record.attributes.inspect}"
  end
  file.rewind
  record = file.next
  puts "First record geometry was: #{record.geometry.as_text}"
end

Я не совсем уверен, как перейти от этого примера к тому, что я хотел бы сделать.


person wuliwong    schedule 15.01.2018    source источник


Ответы (1)


Используйте метод #within?.

point.within?(neighborhood)

Системы координат для точки и окрестности должны быть одинаковыми. Я считаю, что более эффективно использовать прямолинейные проекции для этих типов операций, но я также успешно использовал их в прошлом с WGS, хотя я помню, что получал сообщения об ошибках для определенных типов запросов типа перекрытия в WGS/4326. . #within? должно работать нормально.

person boulder_ruby    schedule 15.05.2018