Autore Topic: Estrazione punti di interesse in ordine di prossimità  (Letto 617 volte)

Offline spriggan

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Estrazione punti di interesse in ordine di prossimità
« il: 17 Febbraio 2011, 22:16:59 CET »
0
Ciao a tutti,
  devo estrarre i punti di interesse in ordine di prossimità alla mia posizione.
Ho una serie di POI memorizzati su una tabella con latitudine e longitudine e vorrei mostrare all'utente i POI all'interno di un'area d 500 mt ordinati per vicinanza.

Non conoscendo bene android e sqlite (è la mia prima app) non so se ci sono funzioni specifiche oppure no.

Avete suggerimenti?

Grazie a tutti

Offline elegos

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    Giacomo Furlan
  • Sistema operativo:
    Mac OS X
Re:Estrazione punti di interesse in ordine di prossimità
« Risposta #1 il: 18 Febbraio 2011, 13:20:34 CET »
0
Qui non c'entra nulla SQLite o Android, sono semplici calcoli cartesiani. Hai una posizione U(x, y) che è la posizione dell'utente e quindi una serie di posizioni P1(x1, y1), Pn(xn,yn) che sono i punti di interesse. Con una semplice equazione cartesiana sei in grado di indicare il punto più vicino, o in ogni caso qualsiasi punto nell'arco di 500 metri. Ovviamente puoi evitare di estrarre i punti che sono distanti più di 500 metri in almeno una delle due assi.
« Ultima modifica: 23 Febbraio 2011, 05:08:29 CET da JD, Reason: fixato link rotto »

Offline spriggan

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Re:Estrazione punti di interesse in ordine di prossimità
« Risposta #2 il: 21 Febbraio 2011, 21:08:16 CET »
0
Ci provo. Grazie

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Estrazione punti di interesse in ordine di prossimità
« Risposta #3 il: 21 Febbraio 2011, 21:36:53 CET »
+1
Se ti può servire io avevo scritto del codice del genere:

Classe LocalizedObject

Codice (Java): [Seleziona]
import com.google.android.maps.GeoPoint;

import android.location.Location;

public class LocalizedObject {

        protected double latitude;
        protected double longitude;

        public double getLatitude() {
                return this.latitude;
        }

        public double getLongitude() {
                return this.longitude;
        }

        /**
         * Set the longitude of the object (in degrees)
         *
         * @param longitude
         */

        public void setLongitude(double longitude) {
                this.longitude = longitude;
        }

        /**
         * Set the latitude of the object (in degrees)
         *
         * @param latitude
         */

        public void setLatitude(double latitude) {
                this.latitude = latitude;
        }

        /**
         * Returns the distance between the object and the given point
         *
         * @param lat
         *            The latitude
         * @param lon
         *            The longitude
         * @return Distance in meters
         */

        public double distanceFrom(double lat, double lon) {

                float[] res = new float[1];
                Location.distanceBetween(this.latitude, this.longitude, lat, lon, res);

                return res[0];
        }

        /**
         * Returns the distance between the object and the given point
         *
         * @param b
         *            The LocalizedObject considered
         * @return
         */

        public double distanceFrom(LocalizedObject b) {
                return distanceFrom(b.latitude, b.longitude);
        }

        public double distanceFrom(android.location.Location l) {
                return distanceFrom(l.getLatitude(), l.getLongitude());
        }

        public static double calculateDistance(double aLat, double aLong,
                        double bLat, double bLong) {
                float[] res = new float[1];
                Location.distanceBetween(aLat, aLong, bLat, bLong, res);

                return res[0];

        }

}

classe LocalizeObjectComparator
Codice (Java): [Seleziona]
import java.util.Comparator;

public class LocalizedObjectsComparator implements Comparator<LocalizedObject> {

        private double latitude;
        private double longitude;

        public LocalizedObjectsComparator(double lat, double lng) {
                latitude = lat;
                longitude = lng;
        }

        public int compare(LocalizedObject objA, LocalizedObject objB) {

                double distA = LocalizedObject.calculateDistance(objA.getLatitude(),
                                objA.getLongitude(), this.latitude, this.longitude);

                double distB = LocalizedObject.calculateDistance(objB.getLatitude(),
                                objB.getLongitude(), this.latitude, this.longitude);

                return (distA > distB ? 1 : (distA == distB ? 0 : -1));

        }
}

serve a ordinare un'ArrayList di oggetti di tipo LocalizedObject in base alla distanza da un certo punto tramite il metodo http://download.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#sort(java.util.List, java.util.Comparator)





Offline spriggan

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Re:Estrazione punti di interesse in ordine di prossimità
« Risposta #4 il: 21 Febbraio 2011, 21:41:44 CET »
0
Grazie, proverò a studiarmelo per bene.