Openlayers-带LineString的SelectFeature不起作用

Openlayers-带LineString的SelectFeature不起作用,openlayers,Openlayers,以下问题: 我使用矢量层中的OpenLayers.Geometry.LineString绘制了一条线。使用Openlayer SelectFeature,我想选择这一行。但这只可能发生在起点和终点。这是openlayer源代码中的一个bug吗 这是我的例子:点击蓝色粗线不起作用 <html> <head> <title>OpenLayers Example</title> <script src="ht

以下问题: 我使用矢量层中的OpenLayers.Geometry.LineString绘制了一条线。使用Openlayer SelectFeature,我想选择这一行。但这只可能发生在起点和终点。这是openlayer源代码中的一个bug吗

这是我的例子:点击蓝色粗线不起作用

<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>

OpenLayers示例
//创建地图
变量选项={
投影:新OpenLayers.projection(“EPSG:900913”),
displayProjection:'EPSG:4326',
单位:“m”,
最大分辨率:156543.0339,
maxExtent:new OpenLayers.Bounds(-20037508.34,-20037508.3420037508.3420037508.34),
控制:[
新建OpenLayers.Control.PanZoom(),
新建OpenLayers.Control.Navigation(),
新的OpenLayers.Control.MousePosition({“numDigits”:8,
displayProjection:new OpenLayers.Projection(“EPSG:4326”),
清空字符串:“地图之外”
}),
]
};        
map=newOpenLayers.map('map',选项);
//创建OSM层
osm_osma=新的OpenLayers.Layer.osm.Osmarender('OpenStreetMap Osmarender'{
minZoomLevel:0,
maxZoomLevel:100,
isBaseLayer:对
});
map.addLayers([osm_osma]);
var lonlat=transformLonLat(“8.3191929972096”,“49.015806343698”,假);
地图设置中心(lonlat,17);
//创建向量层
//分层式
var vlayer_style=OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style['default']);
vlayer_style.fillOpacity=0.6;
vlayer_style.fillColor=“绿色”;
vlayer_style.strokeWidth=6;
vlayer_style.strokeColor=“蓝色”;
vlayer_style.strokeOpacity=1;
var select_style=OpenLayers.Util.extend({},vlayer_style);
选择_style.fillOpacity=0.6;
选择_style.strokeWidth=10;
选择_style.strokeColor=“黑色”;
选择_style.fillColor=“黑色”;
vlayer_style.strokeOpacity=1;
var vStyleMap=new OpenLayers.StyleMap({
“默认”:vlayer_样式,
“选择”:选择样式
});
var vlayer=newopenlayers.Layer.Vector(“vlayer”,{styleMap:vStyleMap});
map.addLayer(vlayer);
//创建SelectFeatures
var selectControl=new OpenLayers.Control.SelectFeature(vlayer,
{
displayClass:“选择按钮”,
标题:“选择方式”,
onSelect:选中,
ONONSELECT:未选择,
切换:false,
点击:正确,
多重:假,
悬停:错,
切换键:“ctrlKey”,
多重键:“shiftKey”,
geometryTypes:[“OpenLayers.Geometry.LineString”],
回调:{
“结束”:功能悬停,
“out”:功能\u悬停\u out
}
});
map.addControl(selectControl);
选择control.activate();
//画线串
var航路点_lon=“8.309636042805”;
var航路点_lat=“49.016608500028”;
var lonlat=transformLonLat(航路点,航路点,假);
var point=新的OpenLayers.Geometry.point(lonlat.lon,lonlat.lat);
var arrPoint=[];
推(点);
航路点_lon=“8.3274863874837”;
航路点_lat=“49.016249642214”;
lonlat=变换lonlat(航路点,航路点,假);
点=新的OpenLayers.Geometry.point(lonlat.lon,lonlat.lat);
推(点);
var line=新的OpenLayers.Geometry.LineString(arrPoint);
var lineF=新的OpenLayers.Feature.Vector(line,null);
vlayer.addFeatures([lineF]);
//功能
功能转换LONLAT(lon、lat、anzeige){
var lonlat1=null;
if(anzeige==真)
lonlat1=新的OpenLayers.LonLat(lon,lat).transform(
新OpenLayers.投影(“EPSG:900913”),//球面墨卡托投影
新OpenLayers.Projection(“EPSG:4326”)//WGS 1984,
);
其他的
lonlat1=新的OpenLayers.LonLat(lon,lat).transform(
新OpenLayers.Projection(“EPSG:4326”),//WGS 1984,
新OpenLayers.Projection(“EPSG:900913”)//球面墨卡托投影
);
返回lonlat1;
}
功能特性_悬停(特性){
feature.layer.div.style.cursor=“十字线”;
} 
功能特性\悬停\输出(特性){
feature.layer.div.style.cursor=“”;
} 
所选功能(obj){
警报(“选择”);
}
未选择的功能(obj){
警报(“取消选择”);
}

<代码> > P>它可能是实际工作的,但是它真的很难点击中间的线(并且更容易点击它的端点)?