Calcola aree geografiche Laravel

0

Sto sviluppando un back-end per un'app per taxi in Laravel 5.

Fino ad ora, le aree servite sono definite dagli amministratori ma vorrei cambiare il modo in cui funziona. Vorrei che ogni tassista definisse le aree di lavoro impostando un punto di partenza e un raggio (creando così un'area circolare) e l'area finale viene calcolata considerando tutti i cerchi e unendo quelli che si sovrappongono in un'area più grande e unica. / p>

In effetti, ho bisogno di dire agli utenti in anticipo se le loro richieste provengono da un'area supportata o non supportata e, unendo le aree, sarebbe molto più facile farlo (ad esempio, usando Poligoni in MySQL).

Come progettereste un tale algoritmo, possibilmente usando le funzioni geospaziali incorporate di MySQL? Posso solo pensare a formula di Haversine e Strumenti di topologia PHP per semplificare le cose.

Grazie:)

    
posta Washery 17.11.2015 - 00:18
fonte

1 risposta

1

Forse nel tuo caso - avere centri e raggio sarebbe più semplice, invece di combinare i cerchi, solo per verificare se la distanza dell'utente rispetto ai centri dei driver è inferiore al raggio specificato. Qualcosa come:

SELECT * from drivers where ST_DISTANCE(drivers.center, POINT([user.lon],[user.lat])) < drivers.radius;
/* assuming drivers.center is of type POINT(), */
/*  This will return all drivers that can serve the user */

L'unico problema è che ST_DISTANCE restituisce il risultato in gradi (stesse unità delle coordinate), quindi o dovrebbe essere convertito in miglia / km ecc. o il raggio dovrebbe essere convertito in gradi.

Controlla anche questo link

    
risposta data 04.06.2016 - 21:36
fonte

Leggi altre domande sui tag