Autore Topic: Mostrare punti in un range di km  (Letto 922 volte)

Offline white$hark

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus4
  • Sistema operativo:
    Windows 7
Mostrare punti in un range di km
« il: 03 Marzo 2014, 12:15:42 CET »
0
Salve ragazzi, avrei bisogno di un grande aiuto.

Supponiamo che io abbia un db con vari punti. A partire dalla mia posizione, è possibile mostrare solo quei punti che si trovano in un range di, per esempio, 200 km intesi come rotta stradale e non in linea d'aria?
So che è possibile ottenere la rotta con la richiesta

Codice: [Seleziona]
http://maps.googleapis.com/maps/api/directions/json?origin=Origine&destination=Destinazione&sensor=false&key=API_KEY
che restituisce qualcosa di simile:
Codice (XML): [Seleziona]
"legs" : [
        {
           "distance" : {
              "text" : "542 km",
              "value" : 542389
           }

Andrebbe bene anche un "circle" che delimiti gli eventuali punti entro i parametri, e ovviamente il raggio sarà < dei km richiesti.
« Ultima modifica: 03 Marzo 2014, 13:16:57 CET da ciao99 »

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:Mostrare punti in un range di km
« Risposta #1 il: 03 Marzo 2014, 15:05:28 CET »
+1
https://developers.google.com/maps/documentation/distancematrix/
Qui c'è proprio quello che cerchi. In pratica ti calcola le distanze da una serie di punti di origine ad una serie di punti di destinazione.
Nel tuo caso devi impostare il parametro di origine con la tua posizione e le destinazioni come i punti che hai nel db.
Questo è un esempio di richiesta:
http://maps.googleapis.com/maps/api/distancematrix/json?origins=roma&destinations=milano|firenze|bologna&mode=driving&sensor=false

Ovviamente una volta fatta la richiesta prendi solo quelli con distanza inferiore a 200km

Offline white$hark

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus4
  • Sistema operativo:
    Windows 7
Re:Mostrare punti in un range di km
« Risposta #2 il: 03 Marzo 2014, 15:31:54 CET »
0
Grazie mille Ciccio!!!
Però come faccio ad impostare come destinazione solo alcuni dei punti presenti nel db? Ad esempio, sono a Firenze e voglio conoscere tutti i cinema nel raggio dei 100km. Nel mio db ho tutti i cinema d'Italia. C'è un modo per fare una query del tipo: "seleziona tutti i cinema della regione Toscana" per passare i risultati nella richiesta http?

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Mostrare punti in un range di km
« Risposta #3 il: 03 Marzo 2014, 15:34:37 CET »
0
ti devi prima fare un filtro, facendoti dare solo i cinema in un range di tot km da dove sei (piu alto del range di navigation ovviamente).
Ma la cosa secondo me non regge, hai un limite di 100 destination nella chiamata che fai, 200km vuol dire ben piu di 100 cinema... (fai 50km ed è già abbastanza)
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline white$hark

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus4
  • Sistema operativo:
    Windows 7
Re:Mostrare punti in un range di km
« Risposta #4 il: 03 Marzo 2014, 15:41:59 CET »
0
ti devi prima fare un filtro, facendoti dare solo i cinema in un range di tot km da dove sei (piu alto del range di navigation ovviamente).
Ma la cosa secondo me non regge, hai un limite di 100 destination nella chiamata che fai, 200km vuol dire ben piu di 100 cinema... (fai 50km ed è già abbastanza)

si 200 era solo un esempio. Sai darmi qualche consiglio su come implementare il filtro, considerando che i punti nel db conterranno la posizione in LatLong?

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Mostrare punti in un range di km
« Risposta #5 il: 03 Marzo 2014, 16:07:05 CET »
+1
beh, i filtri spaziali non sono una cosa "nuova", però hai varie alternative, tra cui:
1 usare un database spaziale tipo: https://www.gaia-gis.it/fossil/libspatialite/wiki?name=splite-android
2 Usare una semplice query old style in caso il tuo db abbia lat e lon su due colonne differenti:
del tipo: select * where lat<46 AND lon>11 AND lat >45 AND lon<12
ti da i punti "circa" in trento-bolzano.
3 oppure puoi prenderti punto a punto dal db e fare un distanceBetween che trovi sulle api google maps (o sulle googlemapsutils, ora non ricordo) e per i punti che soddisfano la tua query, li prendi

I pro e i contro?
1- devi capire come funziona e rifare/modificare il tuo db, ma poi hai ottima potenza e supporto per svariate cose
2- Facile che ti funzioni già come hai ora il db, ma su tanti punti non è proprio la miglior query da fare, coi campi indicizzati forse...
3- Forse la più bella dal punto di vista dell'idea, ma anche la più lenta vista la serie di operazioni che devi fare...

Per le mie conoscenze, userei la 1, però ti direi di provare a partire con la 2, prendi la posizione dell'utente (o del filtro che vuoi fare) e ci aggiungi/sottrai un valore predefinito alla lat/lon.
Ovvio che il valore che aggiungi/sottrai per ottenere la toscana dal centro di essa, ti da di piu della valle d'aosta a partire dal suo capoluogo...

 
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline white$hark

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus4
  • Sistema operativo:
    Windows 7
Re:Mostrare punti in un range di km
« Risposta #6 il: 03 Marzo 2014, 16:28:27 CET »
0
Di SpatiaLite non avevo mai sentito parlarne. Ti ringrazio per le dritte!  ;-)

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Mostrare punti in un range di km
« Risposta #7 il: 06 Maggio 2014, 12:29:50 CEST »
0
Ciao a tutti, mi accodo anch'io. Ho iniziato a capire cos'è e come funziona Spatialite. Avevo già visto il link che hai citato, ma scaricando il materiale, essattamente: spatialite-for-android-3.0.1 , essendo un file compresso, trovo sottocartelle. Seguendo la guida, consiglia di copiare:

  • copiare le librerie native nella radice del progetto Android appena creato
  • copiare il pacchetto java dell'API base nella cartella di origine vi nuovo progetto

il primo punto sono riuscito a farlo perché basta seguire:
spatialite-for-android-3.0.1 -> spatialite-for-android -> spatialite-android -> spatialite-android-library -> libs -> x86 e ho copiato il file:
Citazione
libjsqlite.so
nella radice del progetto ovvero all'interno della cartella
Citazione
nome_progetto
insieme alle cartelle e file Manifest.

Non capisco perché porta "x86" e non quella per il 64 bit, ma credo che funzioni ugualmente sul mio pc che è una Mac Book Pro 64 bit.

Adesso non capisco dove trovare il materiale per il secondo punto: (ovvero)
  • copiare il pacchetto java dell'API base nella cartella di origine vi nuovo progetto

Forse ho sbagliato qualcosa? L'archivio l'ho scaricato seguendo il tutorial:
https://www.gaia-gis.it/fossil/libspatialite/wiki?name=spatialite-android-tutorial

ed è completo, ho provato a scaricarlo altre volte ed il contenuto è uguale.
« Ultima modifica: 06 Maggio 2014, 14:27:37 CEST da pup3770 »