aboutsummaryrefslogtreecommitdiffstats
path: root/app/maps/stop_area_map.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/maps/stop_area_map.rb')
-rw-r--r--app/maps/stop_area_map.rb118
1 files changed, 97 insertions, 21 deletions
diff --git a/app/maps/stop_area_map.rb b/app/maps/stop_area_map.rb
index 3fff4a110..ee0adc0bb 100644
--- a/app/maps/stop_area_map.rb
+++ b/app/maps/stop_area_map.rb
@@ -10,9 +10,6 @@ class StopAreaMap < ApplicationMap
end
def customize_map(map, page)
- page.assign "edit_stop_area_layer", kml_layer(stop_area, { :default => editable? }, :style_map => Design::EditStopAreaStyleMap.new(helpers).style_map)
- page << map.add_layer(:edit_stop_area_layer)
-
if stop_area.children.present?
page.assign "children_layer", kml_layer(stop_area, { :children => true }, :style_map => Design::StopAreasStyleMap.new(helpers).style_map)
page << map.add_layer(:children_layer)
@@ -23,27 +20,106 @@ class StopAreaMap < ApplicationMap
page << map.add_control( hover_control_display_name(:routing_layer) )
page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
else
-
- page.assign "edit_stop_area_layer", kml_layer(stop_area, { :default => editable? }, :style_map => Design::EditStopAreaStyleMap.new(helpers).style_map)
+
+
+ if stop_area.new_record?
+ page << <<EOF
+ var createStyleMap = function() {
+ var defProp = {strokeColor: "red"};
+ var defProp = {strokeColor: "black", strokeOpacity: 1, strokeWidth: 2, fillColor: "white", fillOpacity: 1};
+ var defStyle = OpenLayers.Util.applyDefaults(defProp, OpenLayers.Feature.Vector.style["default"]);
+ return new OpenLayers.StyleMap({'default': defStyle});
+ };
+ var edit_stop_area_layer = new OpenLayers.Layer.Vector( "edit_stop_area_layer", {styleMap: createStyleMap()});
+
+EOF
+ else
+ page.assign "edit_stop_area_layer", kml_layer(stop_area, { :default => editable? }, :style_map => Design::EditStopAreaStyleMap.new(helpers).style_map)
+ end
+
+ page << <<EOF
+ var createAddressStyleMap = function() {
+ var defProp = {strokeColor: "black", strokeOpacity: 1, strokeWidth: 2, fillColor: "#86b41d", fillOpacity: 1};
+ var defStyle = OpenLayers.Util.applyDefaults(defProp, OpenLayers.Feature.Vector.style["default"]);
+ return new OpenLayers.StyleMap({'default': defStyle, });
+ };
+ var address_layer = new OpenLayers.Layer.Vector( "address_layer", {styleMap: createAddressStyleMap()});
+
+ var removeAddress = function() {
+ address_layer.destroyFeatures();
+ };
+
+ var addAddress = function( lat, lng, name ) {
+ var wgs84point = new OpenLayers.Geometry.Point( lat, lng);
+ var point = transformedGeometry( wgs84point, "EPSG:4326", "EPSG:900913" )
+ var feature = new OpenLayers.Feature.Vector( point, { name: name});
+ address_layer.addFeatures( [feature]);
+
+ var bounds = new OpenLayers.Bounds();
+ bounds.extend( feature.geometry.getBounds());
+ for (var x in edit_stop_area_layer.features) {
+ bounds.extend( edit_stop_area_layer.features[x].geometry.getBounds());
+ }
+ map.zoomToExtent(bounds,true);
+ };
+ var transformedGeometry = function( geometry, origin, target ) {
+ return geometry.clone().transform( new OpenLayers.Projection( origin ), new OpenLayers.Projection( target ));
+ }
+EOF
+ page << map.add_layer(:address_layer)
page << map.add_layer(:edit_stop_area_layer)
-
+
if editable?
- page.assign "referential_projection", projection_type.present? ? projection("EPSG:" + projection_type) : JsVar.new("undefined")
- # TODO virer ce code inline
+ 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_coordinates').val(geometry.y.toString()+ ","+ geometry.x.toString());
-
- if(referential_projection != undefined)
- {
- projection_geometry = event.feature.geometry.clone().transform(new OpenLayers.Projection("EPSG:900913"), referential_projection );
- $('#stop_area_projection_xy').val(projection_geometry.x.toString()+ ","+ projection_geometry.y.toString()); }
- }
- });
+
+ var getEventWGS84 = function( event) {
+ return transformedGeometry( event.geometry, "EPSG:900913", "EPSG:4326");
+ }
+ var getEventProjection = function( event, projCode) {
+ return transformedGeometry( event.geometry, "EPSG:900913", projCode);
+ }
+ var updateStopAreaCoordinates = function( event ) {
+ var geometry = getEventWGS84( event );
+ $('#stop_area_coordinates').val( geometry.y.toString()+ ","+ geometry.x.toString());
+ }
+ var updateStopAreaProjectionXY = function( event, projCode ) {
+ var geometry = getEventProjection( event, projCode);
+ $('#stop_area_projection_xy').val( geometry.x.toString()+ ","+ geometry.y.toString());
+ }
+
+ var drawControl = new OpenLayers.Control.DrawFeature( edit_stop_area_layer, OpenLayers.Handler.Point,
+ { featureAdded: function(event) {
+ console.log( "featureAdded" );
+ updateStopAreaCoordinates( event);
+ if( typeof referential_projection !== 'undefined') {
+ updateStopAreaProjectionXY( event, referential_projection.projCode);
+ }
+ this.deactivate();
+ }
+ });
+
+ var dragControl = new OpenLayers.Control.DragFeature( edit_stop_area_layer,
+ { autoActivate: true,
+ onComplete: function(event) {
+ updateStopAreaCoordinates( event);
+ if( typeof referential_projection !== 'undefined') {
+ updateStopAreaProjectionXY( event, referential_projection.projCode);
+ }
+ },
+ });
+ map.addControl( dragControl);
+ map.addControl( drawControl);
EOF
- page << map.add_control(OpenLayers::Control::ModifyFeature.new(:edit_stop_area_layer, :mode => 8, :autoActivate => true))
+
+ if stop_area.new_record?
+ page << <<EOF
+ drawControl.activate();
+EOF
+ end
+ #page << map.add_control(OpenLayers::Control::ModifyFeature.new(:edit_stop_area_layer, :mode => 8, :autoActivate => true))
elsif stop_area.children.present?
page << map.add_control( hover_control_display_name(:children_layer) )
@@ -52,7 +128,7 @@ EOF
page << map.set_center(center.to_google.to_openlayers, 16, false, true)
end
end
-
+
def projection_type
stop_area.referential.projection_type
end