1

Leaflet Control Search に問題があります。Laravel 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 が停止せず、「未定義のプロパティ 'call' を読み取れません」というコンソール エラーが発生します。

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,}},

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

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

古典的な非同期の問題があるようです: AJAX リクエストを (jQuery を介して) 開始し、解決後に変数getJSONの値を割り当てます。allcalls

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

したがって、検索コントロールL.geoJsonは、後で AJAX 解決で構築されるレイヤー グループについて何も認識しません。

于 2016-04-01T05:29:53.367 に答える