javascript - 使用循环添加标记时,Leafletjs map 叠加将停止工作

标签 javascript json leaflet

如果我手动输入纬度和经度以及.addTo(layer)。显示右上角的覆盖菜单,我可以过滤标记。

但是当我尝试传入带有纬度和经度的标记的 JSON 列表并迭代以创建标记,然后 .addTo(layer) 时。覆盖菜单消失,但标记已正确生成。

Leafletjs 脚本(手动输入纬度和经度):https://jsfiddle.net/kdu2woLb/1/

var cities = new L.LayerGroup();
  L.marker([40.7864742, -73.9393257], {icon: citiesIcon}).bindPopup('Job Title: ').addTo(cities);
  L.marker([40.8561684, -73.89659800000001], {icon: citiesIcon}).bindPopup('Job Title: ').addTo(cities);

var jobs = new L.LayerGroup();
  L.marker([40.7127837, -74.0059413], {icon: jobIcon}).bindPopup('Job Title: ').addTo(jobs);
  L.marker([40.7348796, -73.86348939999999 ], {icon: jobIcon}).bindPopup('Job Title: ').addTo(jobs);

Leafletjs 脚本(使用循环生成标记):https://jsfiddle.net/8qmk33kp/2/

  var cities = new L.LayerGroup();
  for ( var i=0; i < markers.length; ++i ) 
  {
     L.marker( [markers[i].latitude, markers[i].longitude],  {icon: jobIcon} )
        .bindPopup( markers[i].title+ '<br/>' + 'Address: ' + markers[i].address + '<br />' + 'Salary range: ' + '$' + markers[i].min_salary + ' - ' + '$' + markers[i].max_salary )
        .addTo(cities);
  }

  var jobs = new L.LayerGroup();
    L.marker([40.7127837, -74.0059413], {icon: jobIcon}).bindPopup('Job Title: ').addTo(jobs);
    L.marker([40.7348796, -73.86348939999999 ], {icon: jobIcon}).bindPopup('Job Title: ').addTo(jobs);

我真的不明白为什么循环会破坏覆盖。当我查看代码时,它似乎正在创建每个标记,然后将其添加到叠加层。那么它应该生成并传递给过滤器吗?为什么标记生成正确但叠加菜单消失?

任何见解都会有所帮助。谢谢!

<小时/>

更新:添加了工作覆盖层和非工作覆盖层的 jsfiddle 链接。看起来我的 JSON 列表有问题,当我删除了除 3-4 个标记之外的所有内容时,叠加层再次起作用... https://jsfiddle.net/qm5vd6k4/1/

最佳答案

查看您的记录 1592 到 1596,包括:

//i = 1592
{
  "title": "PRINCIPAL ADMINISTRATIVE ASSOC",
  "latitude": null,
  "longitude": null
}
//i = 1593
{
  "title": "PUBLIC HEALTH ADVISER",
  "latitude": null,
  "longitude": null
}
//i = 1594
{
  "title": "COMMUNITY COORDINATOR",
  "latitude": null,
  "longitude": null
}
//i = 1595
{
  "title": "ADMINISTRATIVE PUBLIC HEALTH N",
  "latitude": null,
  "longitude": null
}
//i = 1596
{
  "title": "FAMILY PUB HEALTH NURSE (HMH)",
  "latitude": null,
  "longitude": null
}

更新了 JSFiddle:https://jsfiddle.net/8qmk33kp/3/

关于javascript - 使用循环添加标记时,Leafletjs map 叠加将停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39276915/

相关文章:

c# - 将 xml 嵌入 json

json - 如何在 Elm 中解码标记的联合类型?

python - 如何将通过套接字输入的shell命令转换为json序列化数据。例如 : json. 转储和 json.loads python 3x

javascript - 在传单中加载 map 非常慢

javascript - 保存和检索基于 leaflet.js 的非地理 map

javascript - 通过另一个函数在下拉列表中添加选项

javascript - jQuery Ajax 和重定向来自服务器的响应

javascript - OpalRb 与 MeteorJS?

jquery - 为什么数据表在使用 bServerSide=true 时设置自动表宽度?

html - 根据 D3.js 中的设备大小更改 SVG 的大小?