我有一张地图,其中3个geoJson图层代表学区边界。我需要的功能很简单:点击地图,获取每个级别(小学,中学和高中)学校名称的弹出窗口。[eLayer,mLayer,hLayer]
这是我的专题小组:
var fGroup = new L.featureGroup([eLayer,mLayer,hLayer]).addTo(map);
我想我可以使用eachLayer方法和click事件来获取该位置的每个多边形的学校名称。下面的代码让我接近。
fGroup.on('click',function(e){
fGroup.eachLayer(function(layer){
alert(e.layer.feature.properties.School);
});
});
我只获得最后添加的geoJson图层的名称,在这种情况下是高中。我是一名新手程序员,但我现在研究了这几天,我找到了一个有一个建议的例子,但他们的解决方案并没有真正起作用。
为了完全清楚,我希望我的输出如下所示。
___________________________
| |
|Lincoln Elementary School|
|Tubman Middle School |
|Frederick High School |
|_________________________|
答案 0 :(得分:1)
e.layer
只会获得完全点击的图层/功能,点击不会传播"下面的图层,即使它们也可以覆盖那个确切的位置。这就是为什么你只获得最近添加的组数据(即高中)。
此外,您要在fGroup
的每一层上循环,但不要对每个子layer
执行任何特定操作,这实际上是您的3个GeoJSON图层gorup。因此,您将收到3条带有相同消息的警报。
相反,您只需获取点击的位置(e.latlng
)并循环浏览每个单独的图层/要素,以确定此图层是否包含该位置。
答案 1 :(得分:0)
我猜你有几个功能组,每个功能组只涉及一个三联学校。
你很亲密。如果我理解正确,你需要的是:
var txt = '';
var eLayer = L.geoJson(ejsoncontent, {
onEachFeature: function(feature, layer){
txt = txt + feature.properties.School;
}
});
var mLayer = L.geoJson(mjsoncontent, {
onEachFeature: function(feature, layer){
txt = txt + ' ; ' + feature.properties.School;
}
});
var hLayer = L.geoJson(hjsoncontent, {
onEachFeature: function(feature, layer){
txt = txt + ' ; ' + feature.properties.School;
}
});
var fGroup = new L.featureGroup([eLayer,mLayer,hLayer]).addTo(map);
fGroup.on('click',function(e){
alert(txt);
});
点击该组会生成一个包含三个名称的警报。
修改强>
我仍然不知道如何检索geojson内容。例如,eLayer包含一所或几所学校?以下内容仅适用于每个* Layer仅包含一个学校的情况。否则,如果它们包含多个功能,我看不出如何在eLayer功能之一和mLayer之间建立关联......
void print_the_file()
{
FILE* file_hndl = fopen("my_bin_file.bin", "rb");
if (file_hndl == NULL)
{
printf("file open failed");
}
else
{
while (!feof(file_hndl) && !ferror(file_hndl))
{
int c = fgetc(file_hndl);
if (c != EOF) /* should be redundant */
{
printf("%02x", c);
}
}
fclose(file_hndl);
}
}