lib/nswtopo/layer/labels/barriers.rb
module NSWTopo module Labels class Barriers def initialize @barriers, @cache = [], Hash[] end extend Forwardable delegate :<< => :@barriers def to_proc @index ||= RTree.load(@barriers.flat_map(&:explode), &:bounds) @proc ||= lambda do |label_hull, buffer| @cache[[buffer, label_hull.coordinates]] ||= @index.search(label_hull.bounds, buffer).with_object Set[] do |barrier_hull, barriers| next if barriers === barrier_hull.source next unless ConvexHulls.overlap?(barrier_hull, label_hull, buffer) barriers << barrier_hull.source end end end end end end