diff options
Diffstat (limited to 'app/maps/stop_area_map.rb')
| -rw-r--r-- | app/maps/stop_area_map.rb | 118 | 
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  | 
