Это решение также принимает во внимание случай, в котором пользовательский интерфейс отправляет окно, которое пересекает долготу 180/-180 (карты взглядов на низком уровне масштабирования, где вы можете см. весь мир, разрешите бесконечную циклическую горизонтальную прокрутку, так что, например, возможно, что нижний нижний ящик окна = 170, а topRight.lng = -170 (= 190), и тем самым включает диапазон 20 градусов.
def inBoundingBox(bl/*bottom left*/: Coordinates, tr/*top right*/: Coordinates, p: Coordinates): Boolean = {
// in case longitude 180 is inside the box
val isLongInRange =
if (tr.long < bl.long) {
p.long >= bl.long || p.long <= tr.long
} else
p.long >= bl.long && p.long <= tr.long
p.lat >= bl.lat && p.lat <= tr.lat && isLongInRange
}
Спасибо! Это сработало! – viniciusmo
Это будет работать только для выровненных по оси ограничивающих прямоугольников! – mrueg
@mrueg Без дополнительной квалификации ограничительные коробки понимаются как ориентированные по оси. См. Например, mathopenref.com/coordbounds.html. Кроме того, OP описывает поле примера, используя только 4 числа. Для общей коробки требуется не менее 5. Очевидно, он имеет в виду выровненные по оси. –