Пока что коордитаты лежат в таблице 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
})
}