2016-03-30 5 views
0

リーフレットコントロールの検索で問題が発生しました.Lavelvel 5.2を使用してC9.ioでテストしていますが、L.geojsonレイヤーを検索しようとしていますが、 「場所が見つかりません」されて起動し、コンソールにはエラーを与える: リーフレット検索コントロール - 未定義のプロパティ 'call'を読み取ることができません

私はマップ、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を生成しています。 My 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

Promiseコールバックで 'L.Control.Search'をインスタンス化していますか? – ghybs

+0

いいえ、その例はコールバック内で開始しません。 – jsrosas

答えて

0

Promiseコールバック内でL.Control.Searchをインスタンス化するか、少なくともそのコールバック内でsetLayer() methodを使用する必要があります。

あなたはclassic asynchronous issueを持っているように見えます:あなたは、あなたのallcalls変数の値を一度に解決が割り当てられます(jQueryのgetJSONを介して)AJAX要求を、開始します。並行して

、あなたのL.Control.Searchをインスタンス化し、レイヤーグループがで検索されるようallcallsを指定します。ただし、その時点で、AJAXはまだ(すなわち、解決していない)処理しているので、allcallsはまだ(すなわちundefined)割り当てられていません。

したがって、Search Controlは、AJAX解像度で後で作成されるL.geoJsonレイヤーグループについては何も認識していません。