У меня есть таблица базы данных с событиями.Каждое событие имеет местоположение (широта и долгота).Я пишу API, чтобы отображать их на карте с помощью API Карт Google.Я хочу отображать записи только в тех границах, на которые в данный момент указывает карта.Итак, я получаю границы карты и передаю их в API.
var sql = `
SELECT *
FROM event e
WHERE 1=1
`;
if(opts.status){
sql += `AND e.status = '${opts.status}'`
}
if(opts.north){
sql += `
AND e.latitude IS NOT NULL
AND e.latitude < ${opts.north}
`
}
if(opts.south){
sql += `
AND e.latitude IS NOT NULL
AND e.latitude > ${opts.south}
`
}
if(opts.west){
sql += `
AND e.longitude IS NOT NULL
AND e.longitude > ${opts.west}
`
}
if(opts.east){
sql += `
AND e.longitude IS NOT NULL
AND e.longitude < ${opts.east}
`
}
Этот подход работает очень хорошо, за исключением случаев, когда карта пересекает линию 180 °.Тогда я получаю 0 результатов.Вот результат SQL в этой ситуации:
SELECT *
FROM event e
WHERE 1=1
AND e.status = 'approved'
AND e.latitude IS NOT NULL
AND e.latitude < 66.00592309328745
AND e.latitude IS NOT NULL
AND e.latitude > -16.496223071414896
AND e.longitude IS NOT NULL
AND e.longitude > 170.34568706699213
AND e.longitude IS NOT NULL
AND e.longitude < -46.216812933007816
Мой вопрос: как я могу справиться с этим, чтобы он дал мне точные результаты?