我遇到了Leaflet Control Search的问题,我在C9.io上测试,使用Laravel 5.2,我正在尝试搜索一个L.geojson图层,但它所提出的只是“找不到位置” 并且控制台出错: “无法读取未定义的属性'调用'”
我有一个全局变量来保存地图,L.geojson图层和图块。
var map, allcalls, mapquest;
mapquest = new L.TileLayer("http://{s}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png", {
maxZoom: 18,
subdomains: ["otile1", "otile2", "otile3", "otile4"],
});
map = new L.Map('map', {
center: new L.LatLng(39.90973623453719, -93.69140625),
zoom: 3,
layers: [mapquest]
});
var promise = $.getJSON("leaflet_php/get_users.php");
promise.then(function(data) {
allcalls = L.geoJson(data, {
onEachFeature: function (feature, layer) {
layer.bindPopup(feature.properties.fn + '<br>' +feature.properties.gender + '<br>' + feature.properties.addr + '<br>'+ feature.properties.city );
}
});
map.fitBounds(allcalls.getBounds(), {
padding: [20, 20]
});
allcalls.addTo(map);
});
然后我启动了L.control.search,它在地图上显示但是当我搜索时我得不到任何结果加载器gif永远不会停止并且我得到控制台错误“无法读取属性'调用'未定义”
var controlSearch = new L.Control.Search({
layer: allcalls,
position:'topleft',
propertyName: 'city',
});
map.addControl( controlSearch );
我使用https://github.com/bmcbride/PHP-Database-GeoJSON生成json。我的Json至少有1000个功能,每个功能有30个属性。所以这是一个缩写版本。这是我得到的json样本:
{"type":"FeatureCollection","features":[{"type":"Feature","geometry": {"type":"Point","coordinates":[-80.191626,26.339826]},"properties":{"id":1,"fn":"SAMUEL","mi":null,"ln":"STANTON","name_pre":"MR","addr":"9 HONEYSUCKLE DR","apt":null,"city":"AMELIA","st":"OH","zip":45102,"z4":9722,"dpc":99,"fips_cty":25,"latitude":26.339826,"longitude":-80.191626,}},
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:0)
您应该在Promise回调中实例化L.Control.Search
,或者至少使用该回调中的setLayer()
method。
看起来你有一个classic asynchronous issue:你发起了一个AJAX请求(通过jQuery的getJSON
),它会在你解决后分配allcalls
变量的值。
同时,您实例化L.Control.Search
并指定allcalls
作为要搜索的图层组。但是,那时,AJAX仍在处理(即未解析),因此{{ 1}}仍然未分配(即allcalls
)。
因此,您的Search Control对稍后在AJAX解析中构建的undefined
图层组一无所知。