diff options
| author | Xinhui | 2016-02-22 14:17:18 +0100 | 
|---|---|---|
| committer | Xinhui | 2016-02-22 14:17:18 +0100 | 
| commit | d49f47b4ac1db2cd88b96d830772bb7773924601 (patch) | |
| tree | 191c7b9cda9edf939792e7780df4e7460d685a4a /app/presenters | |
| parent | 633004afc5861a6e8158948ddfecd73bf4dd86a8 (diff) | |
| download | chouette-core-d49f47b4ac1db2cd88b96d830772bb7773924601.tar.bz2 | |
Merge model from ninoxe gem
Diffstat (limited to 'app/presenters')
7 files changed, 130 insertions, 0 deletions
| diff --git a/app/presenters/chouette/geometry/access_link_presenter.rb b/app/presenters/chouette/geometry/access_link_presenter.rb new file mode 100644 index 000000000..b0f1d5f94 --- /dev/null +++ b/app/presenters/chouette/geometry/access_link_presenter.rb @@ -0,0 +1,11 @@ +class Chouette::Geometry::AccessLinkPresenter +  include Chouette::Geometry::GeneralPresenter + +  def initialize(access_link) +    @access_link = access_link +  end + +  def geometry +    to_line_string_feature( [ @access_link.stop_area , @access_link.access_point ] ) +  end +end diff --git a/app/presenters/chouette/geometry/access_point_presenter.rb b/app/presenters/chouette/geometry/access_point_presenter.rb new file mode 100644 index 000000000..d3ecb6128 --- /dev/null +++ b/app/presenters/chouette/geometry/access_point_presenter.rb @@ -0,0 +1,11 @@ +class Chouette::Geometry::AccessPointPresenter +  include Chouette::Geometry::GeneralPresenter + +  def initialize(access_point) +    @access_point = access_point +  end + +  def geometry +    to_point_feature( @access_point) +  end +end diff --git a/app/presenters/chouette/geometry/connection_link_presenter.rb b/app/presenters/chouette/geometry/connection_link_presenter.rb new file mode 100644 index 000000000..10f7fcd17 --- /dev/null +++ b/app/presenters/chouette/geometry/connection_link_presenter.rb @@ -0,0 +1,11 @@ +class Chouette::Geometry::ConnectionLinkPresenter +  include Chouette::Geometry::GeneralPresenter + +  def initialize(connection_link) +    @connection_link = connection_link +  end + +  def geometry +    to_line_string_feature( @connection_link.stop_areas) +  end +end diff --git a/app/presenters/chouette/geometry/general_presenter.rb b/app/presenters/chouette/geometry/general_presenter.rb new file mode 100644 index 000000000..3f0dd0031 --- /dev/null +++ b/app/presenters/chouette/geometry/general_presenter.rb @@ -0,0 +1,20 @@ +module Chouette::Geometry::GeneralPresenter + +  def to_line_string_feature( stop_areas) +    points = stop_areas.collect(&:geometry).compact +    GeoRuby::SimpleFeatures::LineString.from_points(points) +  end + +  def to_multi_point_feature( stop_areas) +    points = stop_areas.collect(&:geometry).compact +    GeoRuby::SimpleFeatures::MultiPoint.from_points( points ) +  end + +  def to_point_feature( stop_area) +    return nil unless stop_area.longitude && stop_area.latitude +    GeoRuby::SimpleFeatures::Point.from_lon_lat( stop_area.longitude, stop_area.latitude, 4326) +  end + +end + + diff --git a/app/presenters/chouette/geometry/line_presenter.rb b/app/presenters/chouette/geometry/line_presenter.rb new file mode 100644 index 000000000..89ab39185 --- /dev/null +++ b/app/presenters/chouette/geometry/line_presenter.rb @@ -0,0 +1,42 @@ +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 diff --git a/app/presenters/chouette/geometry/route_presenter.rb b/app/presenters/chouette/geometry/route_presenter.rb new file mode 100644 index 000000000..292548c91 --- /dev/null +++ b/app/presenters/chouette/geometry/route_presenter.rb @@ -0,0 +1,22 @@ +class Chouette::Geometry::RoutePresenter +  include Chouette::Geometry::GeneralPresenter + +  def initialize(route) +    @route = route +  end + +  # return route's stop_areas cloud geometry +  # +  def stop_areas_geometry +    to_multi_point_feature( @route.stop_areas.with_geometry ) +  end + +  # return route geometry based on BoardingPosition or Quay +  # +  def geometry +    to_line_string_feature( @route.stop_areas.with_geometry ) +  end + + +end + diff --git a/app/presenters/chouette/geometry/stop_area_presenter.rb b/app/presenters/chouette/geometry/stop_area_presenter.rb new file mode 100644 index 000000000..195405eab --- /dev/null +++ b/app/presenters/chouette/geometry/stop_area_presenter.rb @@ -0,0 +1,13 @@ +class Chouette::Geometry::StopAreaPresenter +  include Chouette::Geometry::GeneralPresenter + +  def initialize(stop_area) +    @stop_area = stop_area +  end + +  # return line geometry based on CommercialStopPoint +  # +  def geometry +    to_point_feature( @stop_area) +  end +end | 
