Leaflet Ajax JSON文件添加到地图作为叠加

时间:2017-04-07 04:24:23

标签: json ajax leaflet

我有一个JSON文件没有以任何方式格式化以满足geoJson标准。我正在尝试加载我在地图上解析的数据。我能够从数据中创建标记并添加它们:

$.getJSON( tsdata, function ( data ) {
                //loop through all the data
                $.each( data.response.docs, function ( key, val ) {
                    //console.log(val);
                    if ( typeof val.mc_geo !== 'undefined' ) {
                        //lat lng isn't consitently 1, so getting the first only.
                        var geo = val.mc_geo;
                        var gLat = geo.toString().split( ',' )[ 0 ];
                        var gLng = geo.toString().split( ',' )[ 1 ];
                        //add markers to map
                        var marker = L.marker( [ gLat, gLng ],{icon: tsMarker,} ).bindPopup( "<p><strong><a href='" + val.filename + "'>" + val.title + "</a></strong><hr/><br/><strong>Abstract:</strong> " + truncateString( val.abstract, 350 ) + "</p><p><strong>Author(s): </strong>" + val.author + "<p><strong>Station:</strong> " + val.station_primary_full + "</p>" );

                        markerArray.push( marker );
                    }
                } );
                layer_group = L.layerGroup(markerArray);
                map.addLayer(layer_group);
            });

这会将标记图层(layer_group)添加到地图中没问题。但是,如果我尝试将它们添加到:

L.control.layers(baseMaps, overlayMaps).addTo(map);

我收到错误。基本上,L.control.layers没有看到我的layer_group。我可以在getJSON调用之前定义它,但是L.control.layers不会显示数据层充满数据,尽管它在图层面板中被“检查”...没有显示标记。

如何动态创建此标记图层组并控制它在我的L.control.layers中显示(开/关)?

1 个答案:

答案 0 :(得分:1)

听起来您将layer_group添加到图层控件时为空($.getJSON有效asynchronously),然后重新分配它,因此不再有参考你的图层控件和你实例化的标记。

2个简单的解决方法: