aboutsummaryrefslogtreecommitdiffstats
path: root/app/presenters
diff options
context:
space:
mode:
authorXinhui2016-02-22 14:17:18 +0100
committerXinhui2016-02-22 14:17:18 +0100
commitd49f47b4ac1db2cd88b96d830772bb7773924601 (patch)
tree191c7b9cda9edf939792e7780df4e7460d685a4a /app/presenters
parent633004afc5861a6e8158948ddfecd73bf4dd86a8 (diff)
downloadchouette-core-d49f47b4ac1db2cd88b96d830772bb7773924601.tar.bz2
Merge model from ninoxe gem
Diffstat (limited to 'app/presenters')
-rw-r--r--app/presenters/chouette/geometry/access_link_presenter.rb11
-rw-r--r--app/presenters/chouette/geometry/access_point_presenter.rb11
-rw-r--r--app/presenters/chouette/geometry/connection_link_presenter.rb11
-rw-r--r--app/presenters/chouette/geometry/general_presenter.rb20
-rw-r--r--app/presenters/chouette/geometry/line_presenter.rb42
-rw-r--r--app/presenters/chouette/geometry/route_presenter.rb22
-rw-r--r--app/presenters/chouette/geometry/stop_area_presenter.rb13
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