Комментарии 17
2. Показываете хинты только по началу первого слова или по началу каждого?
3. По улицам тоже есть хинт? Как вы отделяете названия улиц от прочего мусора?
4. Какие карты используете для сервиса маршрутизации?
5. На скриншоте какойто лютый индусский код. strtolower и preg_replace по маске \W укоротит его сразу в трое. За CitiName, уж простите, хочется убивать: если нет знания английского то либо смотрим в словаре либо пишем транслитом (очень уж много раз я натыкался на приколы в стиле «mont, mons, month, mesyac» в пределах одного проекта).
2. Не совсем понял вопрос. Отвечу как понял. Например, если ввести «Новгоро», то в саджесте будет «Нижний Новгород», да.
3. Да, есть хинт по улицам. А мусор — это что? Если речь про разные объекты, которые в ФИАС притворяются улицами, то самые назойливые кейсы исправляем точечными переопределениями их «уровня в иерархии».
4. Вроде бы Яндекс.Карты, но зуб не дам (давно не видел этот интерфейс).
5. Не скажу, что в нашем коде не может встретиться чего-то такого, но вот конкретно CitiName — не наше изобретение :) Это поле из API одной из служб доставки.
Если речь про разные объекты, которые в ФИАС притворяются улицами
Они самые
то самые назойливые кейсы исправляем точечными переопределениями их «уровня в иерархии»
Любите вы ручной труд) Я думал исключающий справочник типов объектов.
Не скажу, что в нашем коде не может встретиться чего-то такого
Бывает, но все же от ['Крым респ.', 'Крым Респ.'] малость глаза кровоточат.
Вот те самые где «попадает точка в полигон — есть доставка, не попадает — нет».
Используем для этого PostGIS, модуль для PostgreSQL.
Так у нас объявлена колонка в таблице для хранения полигона:
CREATE TABLE delivery_zone (
...
gis_polygon geometry(Polygon),
...
);
А вот так проверяется попадание точки в полигон:
SELECT a, b, c
FROM delivery_zone
WHERE
St_Intersects(POINT(37.505982, 55.774919), gis_polygon)
А собственно почему dadata? В какой то старой статье видел такой же вопрос как у оратора выше, статья вроде была про разбивку адреса на составляющие (выделить улицу, дом, корпус, квартиру), взял рандомный реальный адрес из заказа, потестил на dadata, в ответ получил, уж простите, полную херню. Да, у нас адреса пишут в свободной форме, сделано для удобства пользователей.
В итоге тоже пришлось пилить свой велосипед который покрывает большинство наших кейсов. Согласен с asm0dey, свое работает бесплатно, свои задачи решает так как нужно нам, и если что-то нужно будет допилить — это будет проще и быстрее.
Насколько легко доставить заказ, зная адрес клиента (не очень)