【发布时间】:2017-06-27 11:34:20
【问题描述】:
情况:我的 Web 应用程序显示了一个包含不同兴趣路径(我所谓的 POI)的地图和一个包含每个 POI 信息的侧边栏。选择侧边栏的一个面板,应该在地图上选择/突出显示相关的 POI。
使用的数据和平台:我使用 Leaflet 和 JavaScript,没有 jQuery。数据作为 GeoJSON 添加到 Leaflet 中。轨迹表示为折线,但我称它们为 POI(只是为了澄清)。我没有也不能使用 jQuery。
什么是有效的:轨迹(折线)是这样添加的:
var pois = L.geoJson(pois,
{
style: style_pois,
onEachFeature: onEachFeature
});
pois.addTo(map);
function onEachFeature(feature, layer)
{
layer.on('click', function (e)
{
sidebar.open('pois');
//get the ID of the clicked POI
number = feature.properties.number;
//Open the accordion tab
var panel = document.getElementsByClassName('accordion-panel');
panel[number-1].style.display="block";
//highlight the selected POI
var selectedFeature = e.target;
selectedFeature.setStyle(style_pois_selected);
});
}
什么不起作用:选择手风琴面板,我得到了相关路径(折线)的 ID,但我无法在 Leaflet 中访问和突出显示这个特定的折线功能。
这是控制手风琴行为的 JavaScript 代码:
var acc = document.getElementsByClassName('accordion');
var panel = document.getElementsByClassName('accordion-panel');
for (var i = 0; i < acc.length; i++)
{
(function(index){
acc[i].onclick = function()
{
// Toggle between adding and removing the "active" class,
//to highlight the button that controls the panel
this.classList.toggle("active");
//Toggle between hiding and showing the active panel
var panel = this.nextElementSibling;
console.log("panel " + acc[0]);
if (panel.style.display === "block") {
panel.style.display = "none";
} else {
panel.style.display = "block";
}
var myIndex = index + 1;
alert("INDEX " + myIndex);
}
})(i);
}
问题:是否有可能基于作为 GeoJSON 包含在 Leaflet 中的层来访问基于任何属性的特定功能?
我尝试了什么:我只遇到了在 onclick 函数中访问某个折线的不同行为的解决方案。在那里可以很容易地应用另一种颜色(setStyle)。我需要从层外访问它。我已经尝试像上面那样再次加载 pois 层,就在手风琴 JavaScript 内部,并针对特定 ID 对其进行过滤,以便只表示一条折线,但它只给了我一个错误,即它是一个无效的 GeoJSON 对象(也许是范围问题?)。
感谢您的帮助!
【问题讨论】:
标签: javascript web-applications leaflet geojson