我有一个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中显示(开/关)?
答案 0 :(得分:1)
听起来您将layer_group
添加到图层控件时为空($.getJSON
有效asynchronously),然后重新分配它,因此不再有参考你的图层控件和你实例化的标记。
2个简单的解决方法:
完全构建后,将layer_group
添加到图层控件:myLayersControl.addOverlay(layer_group, "Markers")
在图层控件中使用占位符图层组,然后将标记添加到其中(myLayerGroup.addLayer(marker)
),或者只需将layer_group
添加到其中(myLayerGroup.addLayer(layer_group)
)