Openlayers-带LineString的SelectFeature不起作用
以下问题: 我使用矢量层中的OpenLayers.Geometry.LineString绘制了一条线。使用Openlayer SelectFeature,我想选择这一行。但这只可能发生在起点和终点。这是openlayer源代码中的一个bug吗 这是我的例子:点击蓝色粗线不起作用Openlayers-带LineString的SelectFeature不起作用,openlayers,Openlayers,以下问题: 我使用矢量层中的OpenLayers.Geometry.LineString绘制了一条线。使用Openlayer SelectFeature,我想选择这一行。但这只可能发生在起点和终点。这是openlayer源代码中的一个bug吗 这是我的例子:点击蓝色粗线不起作用 <html> <head> <title>OpenLayers Example</title> <script src="ht
<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>它可能是实际工作的,但是它真的很难点击中间的线(并且更容易点击它的端点)?