diff options
| author | Luc Donnet | 2012-03-23 16:07:47 +0100 | 
|---|---|---|
| committer | Luc Donnet | 2012-03-23 16:07:47 +0100 | 
| commit | 1ea0a67856ee02538f5079d8f391811e43a3a59b (patch) | |
| tree | 062dde96a21a0d456cb231e4a9be2767eb21ed21 | |
| parent | d753591230660f64d09e21ce5cc1cca1deb6491a (diff) | |
| download | chouette-core-1ea0a67856ee02538f5079d8f391811e43a3a59b.tar.bz2 | |
Add map for network and  stop area
| -rw-r--r-- | Gemfile.lock | 26 | ||||
| -rw-r--r-- | app/controllers/companies_controller.rb | 2 | ||||
| -rw-r--r-- | app/controllers/lines_controller.rb | 12 | ||||
| -rw-r--r-- | app/controllers/networks_controller.rb | 7 | ||||
| -rw-r--r-- | app/controllers/stop_areas_controller.rb | 48 | ||||
| -rw-r--r-- | app/maps/network_map.rb | 31 | ||||
| -rw-r--r-- | app/maps/stop_area_map.rb | 51 | ||||
| -rw-r--r-- | app/views/networks/show.html.erb | 2 | ||||
| -rw-r--r-- | app/views/stop_areas/#index.kml.erb# | 11 | ||||
| l--------- | app/views/stop_areas/.#index.kml.erb | 1 | ||||
| -rw-r--r-- | app/views/stop_areas/index.kml.erb | 2 | ||||
| -rw-r--r-- | app/views/stop_areas/show.html.erb | 2 | ||||
| -rw-r--r-- | app/views/stop_areas/show.kml.erb | 9 | ||||
| -rw-r--r-- | config/routes.rb | 6 | 
14 files changed, 125 insertions, 85 deletions
diff --git a/Gemfile.lock b/Gemfile.lock index 10456c7d0..2e643bdb6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,14 +1,4 @@  GIT -  remote: git://chouette.dryade.priv/ninoxe -  revision: 181c6fa75c4a82fb8c4bff4eec05ef1013b7ae61 -  specs: -    chouette-ninoxe (0.0.8) -      GeoRuby -      activerecord -      composite_primary_keys -      geokit - -GIT    remote: git://github.com/dryade/activerecord-jdbc-adapter.git    revision: 5b45a0a417e146e92db8c57b5c600cdeb9e957bf    specs: @@ -53,6 +43,15 @@ GIT      user_interface (0.0.1)        rails (~> 3.1.0) +PATH +  remote: ~/projects/ninoxe +  specs: +    chouette-ninoxe (0.0.8) +      GeoRuby +      activerecord +      composite_primary_keys +      geokit +  GEM    remote: http://rubygems.org/    specs: @@ -166,9 +165,9 @@ GEM      hoe (2.14.0)        rake (~> 0.8)      i18n (0.6.0) -    inherited_resources (1.3.0) +    inherited_resources (1.3.1)        has_scope (~> 0.5.0) -      responders (~> 0.6.0) +      responders (~> 0.6)      jquery-rails (1.0.19)        railties (~> 3.0)        thor (~> 0.14) @@ -244,7 +243,8 @@ GEM        remarkable (~> 4.0.0.alpha4)        remarkable_activemodel (~> 4.0.0.alpha4)        rspec (>= 2.0.0.alpha11) -    responders (0.6.4) +    responders (0.9.0) +      railties (~> 3.1)      rspec (2.8.0)        rspec-core (~> 2.8.0)        rspec-expectations (~> 2.8.0) diff --git a/app/controllers/companies_controller.rb b/app/controllers/companies_controller.rb index 20967f733..d7b86da06 100644 --- a/app/controllers/companies_controller.rb +++ b/app/controllers/companies_controller.rb @@ -4,6 +4,8 @@ class CompaniesController < ChouetteController    respond_to :xml    respond_to :json +  belongs_to :referential, :parent_class => Referential +    # def update    #   update! do |success, failure|    #     failure.html { redirect_to referential_companies_path(@resource,  @referential) } diff --git a/app/controllers/lines_controller.rb b/app/controllers/lines_controller.rb index 925fae86b..ac441f3ad 100644 --- a/app/controllers/lines_controller.rb +++ b/app/controllers/lines_controller.rb @@ -4,6 +4,8 @@ class LinesController < ChouetteController    respond_to :xml    respond_to :json +  belongs_to :referential +    def show      @map = LineMap.new referential, resource      show! @@ -11,17 +13,9 @@ class LinesController < ChouetteController    protected -  def collection     +  def collection      @q = referential.lines.search(params[:q])      @lines ||= @q.result(:distinct => true).order(:number).paginate(:page => params[:page], :per_page => 10).includes([:network, :company])    end -  def resource_url(line = nil) -    referential_line_path(referential, line || resource) -  end - -  def collection_url -    referential_lines_path(referential) -  end -  end diff --git a/app/controllers/networks_controller.rb b/app/controllers/networks_controller.rb index e5c3e3ca7..ce65d158f 100644 --- a/app/controllers/networks_controller.rb +++ b/app/controllers/networks_controller.rb @@ -4,6 +4,13 @@ class NetworksController < ChouetteController    respond_to :xml    respond_to :json +  belongs_to :referential + +  def show +    @map = NetworkMap.new referential, resource +    show! +  end +    protected    def collection     diff --git a/app/controllers/stop_areas_controller.rb b/app/controllers/stop_areas_controller.rb index 8bd2c29a4..60600e2b4 100644 --- a/app/controllers/stop_areas_controller.rb +++ b/app/controllers/stop_areas_controller.rb @@ -1,9 +1,10 @@  class StopAreasController < ChouetteController    defaults :resource_class => Chouette::StopArea -#  belongs_to :network, :parent_class => Potimart::Network do -  belongs_to :line, :parent_class => Chouette::Line, :optional => true -#  end +  belongs_to :referential do +    belongs_to :line, :parent_class => Chouette::Line, :optional => true, :polymorphic => true +    belongs_to :network, :parent_class => Chouette::Network, :optional => true, :polymorphic => true +  end    respond_to :html, :kml @@ -12,14 +13,22 @@ class StopAreasController < ChouetteController    #   render :layout => false    # end -  # def show -  #   @map = StopAreaMap.new stop_area -  #   show! do |format| -  #     unless stop_area.position or params[:default] -  #       format.kml { render :nothing => true, :status => :not_found } -  #     end -  #   end -  # end +  def index      +    request.format.kml? ? @per_page = nil : @per_page = 10 +    index! +  end + +  def show +    @map = StopAreaMap.new referential, stop_area +    show! do |format| +      unless stop_area.geometry +        format.kml { +          render :nothing => true, :status => :not_found  +        } +         +      end +    end +  end    # def edit    #   stop_area.position ||= stop_area.default_position @@ -33,17 +42,14 @@ class StopAreasController < ChouetteController    alias_method :stop_area, :resource -  # def network -  #   @network ||= Potimart::Network.find(params[:network_id])      -  # end - -  def line -    @line ||= Chouette::Line.find(params[:line_id]) if params[:line_id]       -  end -    def collection -    @q = line ? line.stop_areas.search(params[:q]) : referential.stop_areas.search(params[:q]) -    @stop_areas ||= @q.result(:distinct => true).order(:name).paginate(:page => params[:page], :per_page => 10) +    @q = end_of_association_chain.search(params[:q]) +    @stop_areas ||=  +      begin +        stop_areas = @q.result(:distinct => true).order(:name) +        stop_areas = stop_areas.paginate(:page => params[:page], :per_page => @per_page) if @per_page.present? +        stop_areas +      end    end  end diff --git a/app/maps/network_map.rb b/app/maps/network_map.rb new file mode 100644 index 000000000..4135322ac --- /dev/null +++ b/app/maps/network_map.rb @@ -0,0 +1,31 @@ +class NetworkMap < ApplicationMap + +  attr_reader :referential, :network, :network_style + +  def initialize(referential, network, network_style = nil) +    @referential = referential +    @network = network +    @network_style = network_style +  end + +  def map +    @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls) do |map, page| +      page << map.add_layer(MapLayers::OSM_MAPNIK) +      page << map.add_layer(google_physical)  +      page << map.add_layer(google_streets)  +      page << map.add_layer(google_hybrid)  +      page << map.add_layer(google_satellite)  + +      #page << map.add_layer(kml_layer(network, :styleMap => StyleMap::NetworkStyleMap.new( :style => network_style).style_map)) +      page << map.add_layer(kml_layer(polymorphic_path([referential, network, :stop_areas], :format => :kml), :styleMap => StyleMap::StopAreasStyleMap.new(true).style_map)) +      page << map.zoom_to_extent(bounds) if bounds +    end +  end + +  def bounds +    wgs84_bounds = Chouette::StopArea.bounds +    @bounds ||= OpenLayers::Bounds.new(wgs84_bounds.lower_corner.x, wgs84_bounds.lower_corner.y, wgs84_bounds.upper_corner.x, wgs84_bounds.upper_corner.y).transform(OpenLayers::Projection.new("EPSG:4326"), OpenLayers::Projection.new("EPSG:900913")) + +  end + +end diff --git a/app/maps/stop_area_map.rb b/app/maps/stop_area_map.rb index 009a370ee..ecf94fc42 100644 --- a/app/maps/stop_area_map.rb +++ b/app/maps/stop_area_map.rb @@ -1,25 +1,22 @@  class StopAreaMap < ApplicationMap -  attr_reader :stop_area +  attr_reader :referential, :stop_area    attr_accessor :editable    alias_method :editable?, :editable -  def initialize(stop_area) +  def initialize(referential, stop_area) +    @referential = referential      @stop_area = stop_area    end -  def controls -    [ OpenLayers::Control::Navigation.new ] -  end -    def map      @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls) do |map, page|        page << map.add_layer(MapLayers::OSM_MAPNIK)        stop_area.lines.each do |line| -        page << map.add_layer(kml_layer(line, :styleMap => StyleMap::LineStyleMap.new({:line_color => line.color}).style_map)) -        page << map.add_layer(kml_layer(polymorphic_path([line.network, line, :stop_areas], :format => :kml), :styleMap => StyleMap::StopAreasStyleMap.new(true).style_map)) +        #page << map.add_layer(kml_layer(line, :styleMap => StyleMap::LineStyleMap.new({:line_color => line.color}).style_map)) +        page << map.add_layer(kml_layer(polymorphic_path([referential, line, :stop_areas], :format => :kml), :styleMap => StyleMap::StopAreasStyleMap.new(true).style_map))        end        styles = {"default" => {:strokeColor => "red"}, @@ -27,27 +24,33 @@ class StopAreaMap < ApplicationMap          :strokeWidth => 4}        } -      page.assign "edit_stop_area_layer", kml_layer( polymorphic_path( [stop_area.network, stop_area], :format => :kml, :default => editable?), :style_map => StyleMap::EditStopAreaStyleMap.new(false, false, {}, styles).style_map) +      page.assign "edit_stop_area_layer", kml_layer( polymorphic_path( [referential, stop_area], :format => :kml, :default => editable?), :style_map => StyleMap::StopAreasStyleMap.new(false, false, {}, styles).style_map)        page << map.add_layer(:edit_stop_area_layer) -      if editable? -        # TODO virer ce code inline -        page << <<EOF -        edit_stop_area_layer.events.on({  -                          'afterfeaturemodified': function(event) {  -                            geometry = event.feature.geometry.clone().transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")); -                            $('#potimart_stop_area_position').val(geometry.y + ',' + geometry.x); -                           } -                        }); -EOF -        page << map.add_control(OpenLayers::Control::ModifyFeature.new(:edit_stop_area_layer, :mode => 8, :autoActivate => true)) - -      end - -      page << map.set_center(center.to_google.to_openlayers, 16, false, true) +#       if editable? +#         # TODO virer ce code inline +#         page << <<EOF +#         edit_stop_area_layer.events.on({  +#                           'afterfeaturemodified': function(event) {  +#                             geometry = event.feature.geometry.clone().transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")); +#                             $('#potimart_stop_area_position').val(geometry.y + ',' + geometry.x); +#                            } +#                         }); +# EOF +#         page << map.add_control(OpenLayers::Control::ModifyFeature.new(:edit_stop_area_layer, :mode => 8, :autoActivate => true)) + +#       end + +      page << map.zoom_to_extent(bounds) if bounds +      #page << map.set_center(center.to_google.to_openlayers, 16, false, true)      end    end +  def bounds +    wgs84_bounds = Chouette::StopArea.bounds +    @bounds ||= OpenLayers::Bounds.new(wgs84_bounds.lower_corner.x, wgs84_bounds.lower_corner.y, wgs84_bounds.upper_corner.x, wgs84_bounds.upper_corner.y).transform(OpenLayers::Projection.new("EPSG:4326"), OpenLayers::Projection.new("EPSG:900913")) +  end +    def center      stop_area.position or stop_area.default_position    end diff --git a/app/views/networks/show.html.erb b/app/views/networks/show.html.erb index bd96938c5..e33ecbcf9 100644 --- a/app/views/networks/show.html.erb +++ b/app/views/networks/show.html.erb @@ -1,7 +1,7 @@  <%= title_tag t('networks.show.title', :network => @network.name )%>  <div class="network_show"> - +  <%= @map.to_html.html_safe %>    <div class="summary">      <p>        <label><%= Chouette::Network.human_attribute_name("name") %>: </label> diff --git a/app/views/stop_areas/#index.kml.erb# b/app/views/stop_areas/#index.kml.erb# deleted file mode 100644 index 3a427a151..000000000 --- a/app/views/stop_areas/#index.kml.erb# +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<kml xmlns="http://www.opengis.net/kml/2.2"> -  <Document> -    <% @stop_areas.each do |stop_area| %> -      <Placemark id="<%= stop_area.id %>" > -        <name><%= stop_area.name %></name> -        <%= stop_area.geometry .kml_representation.html_safe %> -      </Placemark> -    <% end %> -  </Document> -</kml> diff --git a/app/views/stop_areas/.#index.kml.erb b/app/views/stop_areas/.#index.kml.erb deleted file mode 120000 index 4b4350837..000000000 --- a/app/views/stop_areas/.#index.kml.erb +++ /dev/null @@ -1 +0,0 @@ -luc@alpha.4257:1332143900
\ No newline at end of file diff --git a/app/views/stop_areas/index.kml.erb b/app/views/stop_areas/index.kml.erb index f813cb1c0..086b8fb42 100644 --- a/app/views/stop_areas/index.kml.erb +++ b/app/views/stop_areas/index.kml.erb @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="UTF-8"?>  <kml xmlns="http://www.opengis.net/kml/2.2">    <Document> -    <% @stop_areas.each do |stop_area| %> +    <% @stop_areas.where("latitude is not null and longitude is not null").each do |stop_area| %>        <Placemark id="<%= stop_area.id %>" >          <name><%= stop_area.name %></name>          <%= stop_area.geometry.kml_representation.html_safe %> diff --git a/app/views/stop_areas/show.html.erb b/app/views/stop_areas/show.html.erb index 8868011d3..4048db566 100644 --- a/app/views/stop_areas/show.html.erb +++ b/app/views/stop_areas/show.html.erb @@ -1,7 +1,7 @@  <%= title_tag t('stop_areas.show.title', :stop_area => @stop_area.name ) %>  <div class="stop_area_show"> - +  <%= @map.to_html.html_safe %>    <div class="summary">      <p>        <label><%= @stop_area.human_attribute_name("name") %>: </label> diff --git a/app/views/stop_areas/show.kml.erb b/app/views/stop_areas/show.kml.erb new file mode 100644 index 000000000..661144f4a --- /dev/null +++ b/app/views/stop_areas/show.kml.erb @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<kml xmlns="http://www.opengis.net/kml/2.2"> +  <Document> +    <Placemark id="<%= @stop_area.id %>" > +      <name><%= @stop_area.name %></name> +      <%= @stop_area.geometry.kml_representation.html_safe %> +    </Placemark> +  </Document> +</kml> diff --git a/config/routes.rb b/config/routes.rb index ec89711f8..e353937cd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -13,11 +13,11 @@ ChouetteIhm::Application.routes.draw do    # Sample resource route (maps HTTP verbs to controller actions automatically):    #   resources :products    resources :referentials do -    resources :lines do +    resources :lines, :networks do        resources :stop_areas      end -    resources :networks, :companies, :stop_areas -     + +    resources :companies, :stop_areas    end     # Sample resource route with options:  | 
