我有一个 OpenLayers 项目,我在其中生成地图和动态加载的 KML。这一切都按预期工作。我的位置标记(猎人拍摄或看到的不同事物)如何都在彼此之上,而您无法阅读标签。
我想要实现的是在您放大和缩小时重新渲染的聚类,但聚类点而不是显示猎人所在位置的 lineString。
我是 javascript 新手(2 个月),我无法在网络上的任何地方找到解决方案。
这是我的代码,
map = new OpenLayers.Map("map");
//var layer= new OpenLayers.Layer.OSM();
var layer = new OpenLayers.Layer.Google(
"Google Hybrid",
{type: google.maps.MapTypeId.HYBRID, numZoomLevels: 20});
layer.wrapDateLine=false;
map.addLayer(layer);
myStyles = new OpenLayers.StyleMap({
"default": new OpenLayers.Style({
strokeColor: "#00ffff",
strokeWidth:4,
strokeOpacity:1,
fillColor:"#003333",
fillOpacity: 1,
labelYOffset: 15,
pointRadius: 5,
label:"${label}",
fontColor:"#ff0000",
context: {
getLabel: function(f) {
if(f.attributes.label===""){
return "here"; }
return f.attributes.label;
}
}
})
})
var clusterStyle = new OpenLayers.StyleMap({
"default": new OpenLayers.Style({
strokeColor: "#00ffff",
strokeWidth:5,
strokeOpacity:1,
fillColor:"#003399",
fillOpacity: 1,
// externalGraphic: "icons/redcircle.png",
labelYOffset: 15,
pointRadius: 5,
label:"${label}",
fontColor:"#ff0000",
context: {
getLabel: function(f) {
var label="init";
if(f.cluster[0].attributes.label!=" "){
label=" "+f.cluster.getClusterCount+" "+f.cluster[0].attributes.label;}
return label;
}
}
})
})
kmlLayer = new OpenLayers.Layer.Vector("Trip", {
styleMap: myStyles,
projection: map.displayProjection,
strategies: [new OpenLayers.Strategy.Fixed()],
// new OpenLayers.Strategy.Cluster()], //causing the problem
protocol: new OpenLayers.Protocol.HTTP({
params:{ tripid:tripid},
url: "kml2.php",
readWithPOST:true,
//{userid:userid,tripid:tripid},
format: new OpenLayers.Format.KML({
// extractStyles: true,
extractAttributes: true
})
})
});
map.addLayer(kmlLayer);
var clat=(parseFloat(minlat)+parseFloat(maxlat))/2;
var clon=(parseFloat(minlon)+parseFloat(maxlon))/2;
var lonlat = new OpenLayers.LonLat(clon,clat).transform(new OpenLayers.Projection("EPSG:4326"),new OpenLayers.Projection("EPSG:900913"));
map.setCenter(lonlat);
map.zoomTo(15);