Сортировка бань по удаленности от точки координат
Завершена
Проект: Городские и общественные бани
Планируемый запуск: | Дата начала: | 08.03.2021 | Планируемое завершение: | Дата завершения: | 12.03.2021 |
Описание задачи
- ТехнологияТребуемый уровень
Проект | Задача | Статус | Дата постановки | Начало | Конец | Кто создал |
---|---|---|---|---|---|---|
Городские и общественные бани | Сортировка бань по удаленности от точки координат | Завершена | 08.03.2021 05:41:30 | 12.03.2021 03:54:17 | 12.03.2021 06:03:33 | |
Городские и общественные бани | Сортировка бань по удаленности от точки координат | Завершена | 08.03.2021 05:41:30 | 09.03.2021 07:51:19 | 09.03.2021 09:50:51 | |
Городские и общественные бани | Сортировка бань по удаленности от точки координат | Завершена | 08.03.2021 05:41:30 | 08.03.2021 05:41:33 | 08.03.2021 06:02:25 |
Пока что коордитаты лежат в таблице TV-параметров в виде обычной строки с разделителем-запятой, поэтому разбить ее и выполнить математические операции над ними видимо можно только через написание пользовательской функции для mysql. Это оверхед. Пока что прописал сортировку уже над полученными данными на стороне JS.
/**
* Сортировка по координатам
*/
if (orderByCoords) {
const { lat, lng } = orderByCoords
companies = companies.sort((a, b) => {
const aCoords = coordsResolver(a)
const bCoords = coordsResolver(b)
if (!aCoords || !bCoords) {
return -1
}
const { lat: aLat, lng: aLng } = aCoords
const { lat: bLat, lng: bLng } = bCoords
const aLatDiff = Math.abs(lat - aLat)
const aLngDiff = Math.abs(lng - aLng)
const bLatDiff = Math.abs(lat - bLat)
const bLngDiff = Math.abs(lng - bLng)
const aDiff = Math.sqrt(aLatDiff * aLatDiff + aLngDiff * aLngDiff)
const bDiff = Math.sqrt(bLatDiff * bLatDiff + bLngDiff * bLngDiff)
if (aDiff > bDiff) {
return 1
} else if (bDiff > aDiff) {
return -1
}
return 0
})
}