[OpenLayers-Trac] [OpenLayers] #3601: SelectFeature with LineString does not work

OpenLayers trac-20090302 at openlayers.org
Fri Jan 6 04:48:17 EST 2012


#3601: SelectFeature with LineString does not work
-----------------------------------+----------------------------------------
 Reporter:  stafy                  |       Owner:  tschaub     
     Type:  bug                    |      Status:  new         
 Priority:  blocker                |   Milestone:  2.12 Release
Component:  Control.SelectFeature  |     Version:  2.11        
 Keywords:                         |       State:              
-----------------------------------+----------------------------------------
 Following problem: My base layer is a OpenLayers.Layer.OSM.Osmarender
 layer. I draw a line with OpenLayers.Geometry.LineString in a second
 vector layer. With the Openlayer SelectFeature I want to select this line.
 But this is only possible at the startpoint and the endpoint.

 Here is my html code.
 Click on the blue thick line selects the line only at startpoint and
 endpoint.

 <html>
 <head>
 <title>OpenLayers Example</title>
 <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
 <script
 type="text/javascript"src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
 </head>

 <body>
 <div style="width:100%; height:100%" id="map"></div>
 <script defer="defer" type="text/javascript">

 //create map
 var options = {
             projection: new OpenLayers.Projection("EPSG:900913"),
     displayProjection: 'EPSG:4326',
     units: "m",
     maxResolution: 156543.0339,
     maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
                                       20037508.34, 20037508.34),
             controls: [new OpenLayers.Control.PanZoom(),
                        new OpenLayers.Control.Navigation(),
                        new OpenLayers.Control.MousePosition({"numDigits":
 8,
                          displayProjection: new
 OpenLayers.Projection("EPSG:4326"),emptyString:"outside the map"}),
                        ]
   };
 map = new OpenLayers.Map('map', options);

 // create OSM layer
 osm_osma = new OpenLayers.Layer.OSM.Osmarender('OpenStreetMap Osmarender',
     {minZoomLevel: 0,
      maxZoomLevel: 100,
      isBaseLayer: true
     }
 );
 map.addLayers([osm_osma]);
 var lonlat=transformLonLat("8.3191929972096", "49.015806343698", false);
 map.setCenter(lonlat, 17);

 //create vector-layer
 // Layerstyle
 var vlayer_style = OpenLayers.Util.extend({},
 OpenLayers.Feature.Vector.style['default']);
 vlayer_style.fillOpacity = 0.6;
 vlayer_style.fillColor = "green";
 vlayer_style.strokeWidth = 6;
 vlayer_style.strokeColor = "blue";
 vlayer_style.strokeOpacity = 1;

 var select_style = OpenLayers.Util.extend({}, vlayer_style);
 select_style.fillOpacity = 0.6;
 select_style.strokeWidth = 10;
 select_style.strokeColor = "black";
 select_style.fillColor = "black";
 vlayer_style.strokeOpacity = 1;

 var vStyleMap = new OpenLayers.StyleMap( {
    "default" :vlayer_style,
    "select" :select_style
 });
 var vlayer = new OpenLayers.Layer.Vector("vlayer", {styleMap: vStyleMap});
 map.addLayer(vlayer);

 //create SelectFeatures
 var selectControl=new
 OpenLayers.Control.SelectFeature(vlayer,{displayClass: "selectButton",
 title: 'Select Ways',
 onSelect:selected,
 onUnselect:unselected,toggle:false,clickout:true,multiple:false,
 hover:false,toggleKey:"ctrlKey", multipleKey:"shiftKey",geometryTypes:
 ["OpenLayers.Geometry.LineString"],
 callbacks: {
     'over': feature_hover,
     'out': feature_hover_out
         }
   });
 map.addControl(selectControl);
 selectControl.activate();

 //Draw Linestring
 var waypoint_lon="8.3096336042805";
 var waypoint_lat="49.016608500028";
 var lonlat=transformLonLat(waypoint_lon, waypoint_lat, false);
 var point=new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat);
 var arrPoint =[];
 arrPoint.push(point);

 waypoint_lon="8.3274863874837";
 waypoint_lat="49.016249642214";
 lonlat=transformLonLat(waypoint_lon, waypoint_lat, false);
 point=new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat);
 arrPoint.push(point);

 var line = new OpenLayers.Geometry.LineString(arrPoint);
 var lineF = new OpenLayers.Feature.Vector(line,null);

 vlayer.addFeatures([lineF]);

 //Functions
 function transformLonLat(lon, lat, anzeige) {
 var lonlat1 = null;
 if (anzeige==true)
     lonlat1=new OpenLayers.LonLat(lon, lat).transform(
             new OpenLayers.Projection("EPSG:900913"), // Spherical
 Mercator Projection
             new OpenLayers.Projection("EPSG:4326") // WGS 1984,
             );
 else
     lonlat1=new OpenLayers.LonLat(lon, lat).transform(
             new OpenLayers.Projection("EPSG:4326"), // WGS 1984,
             new OpenLayers.Projection("EPSG:900913") // Spherical Mercator
 Projection
             );
 return lonlat1;
 }

 function feature_hover( feature ){
     feature.layer.div.style.cursor = "crosshair";
 }

 function feature_hover_out( feature ){
     feature.layer.div.style.cursor = "";
 }

 function selected (obj) {
     alert("select");
 }

 function unselected (obj) {
     alert("deselect");
 }
 </script>
 </body>
 </html>

-- 
Ticket URL: <http://trac.openlayers.org/ticket/3601>
OpenLayers <http://openlayers.org/>
A free AJAX map viewer


More information about the Trac mailing list