Бюджет:
12 500 руб
Требуется добавление двух фич в приложение для iOS, написанное на Objective C. Приложение пока не в App Store.
1. Поиск объектов на карте в области произвольной формы.
2. Буферизация (увеличение/уменьшение) этой произвольной области.
Есть API для поиска объектов, которое ищет в области прямоугольной формы (принимает координаты двух противоположных углов прямоугольника). Реализовано рисование произвольной области на карте и преобразование в массив координат.
Поэтому требуется вычисление обрамляющего прямоугольника, запрос API по нему, а затем отбрасывание лишних результатов (тех, которые не пересекаются с нарисованной областью). Объектами могут быть как точки на карте, так и полигоны, и даже мультиполигоны.
Буферизация это известная функция геопроцессинговых библиотек, здесь не надо изобретать велосипед.
Наш нативный формат геоданных GeoJSON, необходимо это учесть.
Требуемые геометрические функции, а именно: вхождение в область и буферирование обязательные элементы серьезных геопроцессинговых библиотек.
На Андроиде мы успешно используем JTS, а на вебсайте turfjs.
Существует также библиотека на Swift GEOswift.
Мы рассматриваем любую библиотеку, решающую наши задачи. Это может быть либо GEOswift, тогда надо будет сообразить, как конвертировать в/из GeoJSON, либо JTS, тогда надо настроить мост Java-Obj.C, либо turfjs, тогда надо будет запускать JS код в WebView или как-то иначе, либо любая другая (бесплатная) библиотека с буферизацией и определением пересечений полигонов.
Работа не очень трудозатратная по времени, но требует большой квалификации. Поэтому, пожалуйста, не беритесь за работу, если не понимаете, как сделать.
Требуемый функционал можно посмотреть на нашем вебсайте routes.global или в андроид приложении Routes.global. В приложении надо сначала выбрать ваш исходный город. Выберите кнопку "поиск на карте", далее выбираете типы объектов под строкой поиска (поиск идет сразу по всей видимой карте), рисуете пальцем/мышью область, и в ней опять происходит поиск. Область можно увеличить и уменьшить.