aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/maps/network_map.rb2
-rw-r--r--app/maps/stop_area_map.rb20
-rw-r--r--app/models/referential.rb42
-rw-r--r--spec/requests/referentials_spec.rb2
4 files changed, 46 insertions, 20 deletions
diff --git a/app/maps/network_map.rb b/app/maps/network_map.rb
index 4271133bb..c1104e877 100644
--- a/app/maps/network_map.rb
+++ b/app/maps/network_map.rb
@@ -1,6 +1,6 @@
class NetworkMap < ApplicationMap
- attr_reader :referential, :network, :network_style
+ attr_reader :network, :network_style
def initialize(network, network_style = nil)
@network = network
diff --git a/app/maps/stop_area_map.rb b/app/maps/stop_area_map.rb
index 0e02654e9..65c8b72fd 100644
--- a/app/maps/stop_area_map.rb
+++ b/app/maps/stop_area_map.rb
@@ -1,6 +1,6 @@
class StopAreaMap < ApplicationMap
- attr_reader :referential, :stop_area
+ attr_reader :stop_area
attr_accessor :editable
alias_method :editable?, :editable
@@ -19,15 +19,23 @@ class StopAreaMap < ApplicationMap
page.assign "edit_stop_area_layer", kml_layer(stop_area, { :default => editable? }, :style_map => StyleMap::EditStopAreaStyleMap.new.style_map)
page << map.add_layer(:edit_stop_area_layer)
-
- if editable?
- # TODO virer ce code inline
+
+
+ if editable?
+ page.assign "referential_projection", projection_type.present? ? projection("EPSG:" + projection_type) : JsVar.new("undefined")
+ # 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"));
$('#stop_area_longitude').val(geometry.x);
$('#stop_area_latitude').val(geometry.y);
+
+ if(referential_projection != undefined)
+ {
+ projection_geometry = event.feature.geometry.clone().transform(new OpenLayers.Projection("EPSG:900913"), referential_projection );
+ $('#stop_area_x').val(projection_geometry.x);
+ $('#stop_area_y').val(projection_geometry.y); }
}
});
EOF
@@ -38,6 +46,10 @@ EOF
page << map.set_center(center.to_google.to_openlayers, 16, false, true)
end
end
+
+ def projection_type
+ stop_area.referential.projection_type
+ end
def ready?
center.present?
diff --git a/app/models/referential.rb b/app/models/referential.rb
index 758e3f9eb..068b1df68 100644
--- a/app/models/referential.rb
+++ b/app/models/referential.rb
@@ -10,8 +10,8 @@ class Referential < ActiveRecord::Base
validates_uniqueness_of :name
validates_format_of :slug, :with => %r{\A[0-9a-z_]+\Z}
validates_format_of :prefix, :with => %r{\A[0-9a-zA-Z_]+\Z}
- validates_format_of :upper_corner, :with => %r{\A[0-9]+\.?[0-9]*\, [0-9]+\.?[0-9]*\Z}
- validates_format_of :lower_corner, :with => %r{\A[0-9]+\.?[0-9]*\, [0-9]+\.?[0-9]*\Z}
+ validates_format_of :upper_corner, :with => %r{\A-?[0-9]+\.?[0-9]*\,-?[0-9]+\.?[0-9]*\Z}
+ validates_format_of :lower_corner, :with => %r{\A-?[0-9]+\.?[0-9]*\,-?[0-9]+\.?[0-9]*\Z}
attr_accessor :resources
attr_accessor :upper_corner
@@ -56,7 +56,6 @@ class Referential < ActiveRecord::Base
def define_default_attributes
self.time_zone ||= Time.zone.name
- self.bounds ||= GeoRuby::SimpleFeatures::Envelope.from_coordinates( [ [-5.2, 42.25], [8.23, 51.1] ] ).to_polygon.as_ewkt # bounds for France by default
end
def switch
@@ -94,30 +93,43 @@ class Referential < ActiveRecord::Base
imports.create(:resources => resources) if resources
end
- before_save :update_envelope
- before_create :update_envelope
- def update_envelope
- self.bounds = GeoRuby::SimpleFeatures::Envelope.from_coordinates([ [@lower_corner.x, @lower_corner.y], [ @upper_corner.x, @upper_corner.y ] ]).to_polygon.as_ewkt()
- end
-
def upper_corner
- "#{envelope.upper_corner.x}, #{envelope.upper_corner.y}"
+ envelope.upper_corner
end
def upper_corner=(upper_corner)
- @upper_corner = GeoRuby::SimpleFeatures::Point.from_coordinates( upper_corner.split(",") )
+ if String === upper_corner
+ upper_corner = (upper_corner.blank? ? nil : GeoRuby::SimpleFeatures::Point::from_lat_lng(Geokit::LatLng.normalize(upper_corner), 4326))
+ end
+
+ envelope.tap do |envelope|
+ envelope.upper_corner = upper_corner
+ self.bounds = envelope.to_polygon.as_ewkt
+ end
end
def lower_corner
- "#{envelope.lower_corner.x}, #{envelope.lower_corner.y}"
+ envelope.lower_corner
end
def lower_corner=(lower_corner)
- @lower_corner = GeoRuby::SimpleFeatures::Point.from_coordinates( lower_corner.split(",") )
+ if String === lower_corner
+ lower_corner = (lower_corner.blank? ? nil : GeoRuby::SimpleFeatures::Point::from_lat_lng(Geokit::LatLng.normalize(lower_corner), 4326))
+ end
+
+ envelope.tap do |envelope|
+ envelope.lower_corner = lower_corner
+ self.bounds = envelope.to_polygon.as_ewkt
+ end
+ end
+
+ def default_bounds
+ GeoRuby::SimpleFeatures::Envelope.from_coordinates( [ [-5.2, 42.25], [8.23, 51.1] ] ).to_polygon.as_ewkt
end
- def envelope
- GeoRuby::SimpleFeatures::Geometry.from_ewkt(read_attribute(:bounds)).envelope
+ def envelope
+ bounds = read_attribute(:bounds)
+ GeoRuby::SimpleFeatures::Geometry.from_ewkt(bounds.present? ? bounds : default_bounds ).envelope
end
end
diff --git a/spec/requests/referentials_spec.rb b/spec/requests/referentials_spec.rb
index 54e63c33c..9204c76e9 100644
--- a/spec/requests/referentials_spec.rb
+++ b/spec/requests/referentials_spec.rb
@@ -33,6 +33,8 @@ describe "Referentials" do
visit new_referential_path
fill_in "Nom", :with => "Test"
fill_in "Code", :with => "test"
+ fill_in "Point haut/droite emprise par défaut", :with => "0.0, 0.0"
+ fill_in "Point bas/gauche emprise par défaut", :with => "1.0, 1.0"
click_button "Créer Espace de données"
Referential.where(:name => "Test").should_not be_nil