Questa soluzione prende anche in considerazione il caso in cui l'utente invia una scatola che attraversa longitudine 180/-180 (vista Maps sul livello di zoom basso dove è possibile vedere il mondo intero, consentire lo scorrimento orizzontale ciclico infinito, quindi è possibile ad esempio che bottomLeft.lng = 170 di una casella mentre topRight.lng = -170 (= 190) e di quello compreso un intervallo di 20 gradi
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
}
Grazie! Questo è funzionante! – viniciusmo
Funzionerà solo per i riquadri di delimitazione allineati agli assi! – mrueg
@mrueg Senza ulteriore qualifica, le caselle di delimitazione sono intese come assi allineate. Vedi ad esempio mathopenref.com/coordbounds.html. Inoltre, l'OP descrive la casella di esempio utilizzando solo 4 numeri. Per una scatola generica, sono richiesti almeno 5. Ovviamente si riferisce a quelli allineati sull'asse. –