app/presenters/chouette/geometry/line_presenter.rb
class Chouette::Geometry::LinePresenter
include Chouette::Geometry::GeneralPresenter
def initialize(line)
@line = line
end
# return line geometry based on CommercialStopPoint
#
def geometry
features = commercial_links.map { |link| to_line_string_feature(link) }
GeoRuby::SimpleFeatures::MultiLineString.from_line_strings( features, 4326)
end
#
# return line's stop_areas cloud geometry
#
def stop_areas_geometry
to_multi_point_feature( @line.commercial_stop_areas)
end
def commercial_links
link_keys = []
[].tap do |stop_area_links|
@line.routes.each do |route|
previous_commercial = nil
routes_localized_commercials(route).each do |commercial|
if previous_commercial && !link_keys.include?( "#{previous_commercial.id}-#{commercial.id}")
stop_area_links << [ previous_commercial, commercial]
link_keys << "#{previous_commercial.id}-#{commercial.id}"
link_keys << "#{commercial.id}-#{previous_commercial.id}"
end
previous_commercial = commercial
end
end
end
end
def routes_localized_commercials(route)
route.stop_areas.map { |sa| sa.parent}.compact.select { |sa| sa.latitude && sa.longitude}
end
end