Брошюра GeoJSON с автозаполнением Jquery UI

1

У меня проблема. Как автозаполнение, когда я что-то ищу?

У меня есть это:

<form>
    <div class="col-sm-11">
        <input type="text" name="busca" id="txtSearch" class="form-control" placeholder="Buscar..." />
    </div>
        <button class="btn btn-default" id="btnSearch"><i class="fa fa-search"></i></button>
</form>

Ничего больше, просто форма с входным текстом и buttom. Когда я пишу что-нибудь, что мне нужно, это автозаполнение, когда вы найдете слово "щелчок" в buttom.

И у моих Js есть:

stComerciaisLayer = L.geoJSON(setoresComerciais, {
                style: function (feature) {
                    ...
                },
                onEachFeature: onEachFeature
            }).addTo(map);

Переменная stComercialLayer - это объект, который генерирует слои отображения. setoresComerciais - та же переменная в моем json (geoSetoresComerciais)

    setoresComerciais={
      "type": "FeatureCollection",
      "totalFeatures": 116,
      "features": [
        {
         (...)

а также

$("#txtSearch").autocomplete({
                source: setoresComerciais
            });

это автозаполнение, но источник, мне нужна функция или массив для работы, я думаю.

Проблема заключается в том, что stComerciaisLayer является объектом, а источник просто принимает тип Array, String или Function, соответствует документации jQuery jQuery: (Что мне нужно сделать?

Возобновление: мне просто нужно, чтобы автозаполнение работало! Мой код находится на git:

https://github.com/eltonsantos/leaflet-tests/tree/master/teste2

Спасибо!!

Теги:
leaflet
autocomplete
geojson

1 ответ

1
Лучший ответ

Да, вы правы, вам нужно передать массив в источник ниже:

$("#txtSearch").autocomplete({
                source: setoresComerciais
            });

И, как вы заметили, setoresComerciais является объектом geojson. Но этот geojson содержит множество функций внутри, и мы можем использовать это для работы автозамены.

Поскольку ваш geojson - это набор функций: type:"FeatureCollection", все ваши функции расположены в setoresComerciais.features (массив). Каждая функция также является объектом, но если мы перебираем каждую функцию в этом массиве с помощью array.map(), мы можем получить массив, содержащий одну строку для каждой функции, которую вы можете использовать для функции автозаполнения:

$("#txtSearch").autocomplete({
    source: setoresComerciais.features.map(function(d) { return d.properties.sco_dsc_sa; })
});

.map позволяет использовать для итерации через массив признаков, функция принимает один аргумент (элемент в массиве) и позволяет нам возвращать значение в новый массив (поскольку массив возвращается.map()).

Я выбрал свойство наугад (есть дубликаты, вы можете удалить их относительно легко, но я предполагаю, что вы выберете свойство, уникальное для каждого маркера).

  • 0
    Отлично !! Спасибо! А для увеличения найти найти? Я пытался выбрать: function (event, ui) {map.fitBounds (setoresComerciais [ui.item.value] .getBounds ()); } Но не работает. И я добавил в исходном коде следующее: return d.properties.sco_num_sc + "-" + d.properties.sco_dsc_sa. Когда найдете то, что ищете, нужно иметь зум найти. Мне нужно выучить Javascript :( У меня много трудностей для изучения функций.: /
  • 0
    Я посмотрю, но вы, вероятно, должны опубликовать это как новый вопрос - иначе это будет только я, увидев это. Кроме того, есть больше возможностей для расширения вопроса и больше возможностей для ответа (и лучшие варианты форматирования).
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню