Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Ricerca Latitudine e Longitudine per raggio

    Salve a tutti, provo a spiegare il problema che ho da risolvere. Ho una tabella composta da due campi:
    -Lat
    -Long
    Devo scrivere una query che data una Long e Lat in input mi restituisca tutte le Lat e Long salvate a db in un determinato raggio anch'esso dato in in input, è possibile ?
    Grazie a tutti in anticipo

  2. #2
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,683
    forse puoi farlo anche in sql ma devi cheiderlo nel forum adeguato

    da codice devi ciclare un datareader di tutti i punti, ad ogni giro devi calcolarti la distanza di ogni punto dal punto che fornisci in input e selezionare il record che ha questa distanza inferiore al raggio dato in input.

    Distanza tra due punti A(x1,y1) e B(x2,y2) si calcola con radice quadrata di [(x2- x1)2 + (y2- y1)2]

    buon divertimento
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  3. #3
    Ok, spulciando in giro sono riuscito a scrivere questa funzione. Ovviamente andrebbe provata anche la tua soluzione e capire magari con stress test quale offre performance migliori!

    Codice PHP:
    public static function getNearby(float latfloat lngstring Typeint limit 50int distance 50string unit 'km')
    {
        
    // Raggio della terra
        
    if (unit == 'km'radius 6371.009// KM
        
    elseif (unit == 'mi'radius 3958.761// MILES

        // confine Latitudine
        
    maxLat lat RadianToDegree(distance radius);
        
    minLat lat RadianToDegree(distance radius);

        
    // confine longitudine
        
    maxLng lng RadianToDegree(distance radius Math.Cos(DegreeToRadian(lat)));
        
    minLng lng RadianToDegree(distance radius Math.Cos(DegreeToRadian(lat)));

        
    // e la select (Non ho scritto tutta la parte c# per eseguirla in quanto testata direttamente via sql)
        
    var nearby = ('SELECT * FROM table WHERE lat > $minLat AND lat  < $maxLat AND lng > $minLng AND lng < $maxLng ORDER BY ABS(lat -  $lat) + ABS(lng - $lng) ASC;

        return nearby;
    }

    private double DegreeToRadian(double angle)
    {
       return Math.PI * angle / 180.0;
    }

    private double RadianToDegree(double angle)
    {
       return angle * (180.0 / Math.PI);


  4. #4
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,683
    Non so perchè corregga le distanze con la curvatura terrestre (sono geograficamente ignorante) ma sarà sicuramente più precisa quella che hai postato. E' sicuramente più performante questa piuttosto che un ciclo su un datareader.
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.