Яндекс карты: расстояние до ближайшего полигона

Выкладываю на всеобщее обозрение скрипт роутинга маршрута до ближайшего полигона с подсчетом расстояния до него.
На хабре и других ресурсах не встретил вменяемого решения.

Основная «фишка» в алгоритме. После клика по некой точке вне полигона происходит следующее:

  1. Определяется индекс полигона, расстояние до которого минимально. (просто берём все вершины полигона и ищем расстояние от них до той точки, на которую кликнули. Ищем минимальное расстояние. Сравниваем с минимальными расстояниями других полигонов.)
  2. Определяем геометрический центр ближайшего полигона (к примеру, по оси X — это центр линии с вершинами самой левой и самой правой вершины полигона; аналогично — с осью Y)
  3. Строим маршрут от точки, куда кликнули до этого геометрического центра.
  4. Делим маршрут на отрезки и для каждого отрезка определяем — лежит ли он внутри полигона или нет
  5. Все отрезки, лежащие вне полигона — добавляем в некий массив отрезков, который и будет искомым маршрутом
  6. Находим тот отрезок, который пересекает наш полигон (перебираем каждую грань полигона и проверяем функцией пересечения отрезков с заранее известными координатами)
  7. Находим точку пересечения этого отрезка и полигона и её добавляем в искомый массив отрезков.
  8. Строим маршрут.

Читать далее

Живой поиск на Битрикс. Пример реализации.

49a91a4ebb

Основные задачи:

  • реализовать поиск таким образом, чтобы после ввода поискового запроса в строку, ниже этой строки появились результаты поиска
  • запрос на получение результата должен происходить только после окончания ввода поискового запроса

Окей, поехали!

Примерная вёрстка самого блока с поисковой строкой и div-ником, куда будем добавлять результаты поиска:

<form action="/search/index.php">
            <input type="search" maxlength="50" size="15" value="" name="q" id="q" autocomplete="off">
    &nbsp;
    <button class="reset" id="reset_live_search" value="reset" type="reset"></button>
    <div id="search_result">
        <div class="live-search">
        </div>    
    </div>
</form>
Читать далее

JS плагин для сохранения данных на локальный диск.

Нашел отличный JS плагин для сохранения данных на жесткий диск.

К сожалению, document.execCommand(‘SaveAs’) уже не спасает, посему встречайте:

https://github.com/eligrey/FileSaver.js

пример использования:

var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
saveAs(blob, "hello world.txt");

Демка здесь.

Подгрузка страниц на AJAX для элементов каталога в Битрикс

Для того, чтобы в Битрикс сделать бесконечную AJAX подгрузку страниц каталога, необходимо играться с параметром PAGEN_1 при включенной пагинации.

Выглядеть это будет примерно так:

Clipboard01

Для начала определим в init.php переменную, в которой будем хранить количество элементов, отображаемых на странице при каждой прогрузке:

/*
 * количество элементов каталога на странице
 */
$elem_per_page = 48;

Далее пишем JS код, который будет вызываться при прокрутке страницы. Если мы достигаем подвала сайта — делаем AJAX запрос и добавляем в блок со списком товаров новые:

Читать далее

Редактирование и удаление элементов и разделов из публичной части сайта Битрикс

В 1С-Битрикс управление сайтом есть замечательная возможность, которую очень ценят клиенты и контент-менеджеры. Речь идет о изменении, добавлении и удалении элементов и разделов инфоблока из публичной части сайта, разработанного на Битриксе. Запрограммированный правильным образом сайт имеет такую возможность — при включенном режиме редактирования наведя курсор например на товар, вверху появляются кнопки управления.

MAjppV0hnK4Wme

Далее, если мы планируем поменять информацию о товаре — жмем изменить. При этом всплывет окошко со всеми теми же полями и вкладками, что и при обычном редактировании из админки, но нам уже не нужно искать соответствующий элемент инфоблока и идти по структуре каталога.

Читать далее