Autore Topic: Georeferenziazione interna ad un'area  (Letto 2216 volte)

Offline nat75

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Georeferenziazione interna ad un'area
« il: 05 Dicembre 2011, 17:51:04 CET »
0
Salve,
mi sono appena iscritto a questo forum e premetto che sono un neofita nello sviluppo di applicazioni per Android.

Il mio problema è il seguente:

Diciamo che ho 4 coordinate (latitudine e longitudine) che formano sulla mappa un quadrato. E' possibile sapere, in tempo reale, utilizzando delle API se camminando con il mio dispositivo GPS mi trovo all'interno di questo quadrato o al di fuori?



« Ultima modifica: 05 Dicembre 2011, 18:02:51 CET da nat75 »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Georeferenziazione interna ad un'area
« Risposta #1 il: 05 Dicembre 2011, 18:34:47 CET »
0
Solo una domanda di chiarimento: può darsi il tuo problema si essenzialmente geometrico? Voglio dire: tu vuoi sapere se, date le coordinate (ne bastano 2 coppie) dei vertici di un quadrato, un certo punto è interno al quadrato. E' così?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline nat75

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Georeferenziazione interna ad un'area
« Risposta #2 il: 05 Dicembre 2011, 21:14:15 CET »
0
esatto... è proprio quello che mi serve!

Offline nat75

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Georeferenziazione interna ad un'area
« Risposta #3 il: 06 Dicembre 2011, 09:04:12 CET »
0
Il mio intento in pratica è quello di dare delle informazioni se ci si trova all'interno di "un'area"..

E' chiaro che ho semplificato il tutto parlando di un quadrato.. ma a regime l'area sarà circoscritta da un qualsiasi poligono chiuso.

Spero di esser stato chiaro..  :-)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Georeferenziazione interna ad un'area
« Risposta #4 il: 06 Dicembre 2011, 09:25:00 CET »
0
Il mio intento in pratica è quello di dare delle informazioni se ci si trova all'interno di "un'area"..

E' chiaro che ho semplificato il tutto parlando di un quadrato.. ma a regime l'area sarà circoscritta da un qualsiasi poligono chiuso.

Spero di esser stato chiaro..  :-)

Si, però come detto sopra è un problema di geometria analitica e non sono a conoscenza di funzioni già pronte nelle librerie (considera anche che non me ne sono mai interessato, per cui potrebbero esserci tranquillamente).  :-)

Comunque:
Se la figura è un cerchio controlli che la distanza dal centro sia minore del raggio.
Se la figura è un quadrato allineato con lng e lat, controlli che le coordinate siano comprese tra quelle dei due vertici estremi del quadrato.
Se la figura è un quadrato non allineato con niente... prova questo How to see if point is in square? - Other Programming Languages
Se la figura è un poligono chiuso... ci vorrebbe un esperto di geometria analitica.  :-P

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline nat75

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Georeferenziazione interna ad un'area
« Risposta #5 il: 06 Dicembre 2011, 12:02:55 CET »
0
Ok...
però vorrei farti un'altra domanda.

mentre navigo con il mio GPS io posso vedere se sono all'interno di una città?
Ad esempio se mi trovo nell'area di Roma?

Cioè.. c'è un modo per delimitare Roma?

Scusa se possono sembrare domande stupide, ma mi servono per capire se sto intraprendendo la strada giusta.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Georeferenziazione interna ad un'area
« Risposta #6 il: 06 Dicembre 2011, 12:29:52 CET »
0
Ad esempio se mi trovo nell'area di Roma?

Cioè.. c'è un modo per delimitare Roma?

Scusa se possono sembrare domande stupide, ma mi servono per capire se sto intraprendendo la strada giusta.

Partiamo dal presupposto che non occorrerà delimitare Roma al centimetro. Nel 99% delle applicazioni ti basta una approssimazione molto più grezza. Potresti per esempio assimilare Roma ad un cerchio (metti il centro nel punto opportuno) e controlli se sei a Roma verificando che la tua distanza dal centro del cerchio sia minore del suo raggio. Se Roma avesse una forma strana, definisci più cerchi parzialmente sovrapposti che approssimano la forma e controlla l'appartenenza ad almeno uno di questi.



Comunque, pur non essendo strettamente connesse allo sviluppo Android, ma non sono stupide.


NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline nat75

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Georeferenziazione interna ad un'area
« Risposta #7 il: 06 Dicembre 2011, 13:18:12 CET »
0
In pratica, come ti avevo accennato in qualche post sopra, io dovrei fare un progetto, naturalmente da sviluppare con android, nel quale dare delle indicazione a persone che si trovano all'interno di un'area.

Purtroppo mi è stato chiesto di essere piuttosto preciso nella delimitazione delle aree. Quindi non credo di poter utilizzare un solo punto di riferimento e poi verificare che la persona sia internamente ad un cerchio (volendo sfruttare la tecnica di cui mi hai detto prima).

Dovrei invece in qualche modio ricavarmi tutti i punti presenti all'interno di un'area?!??!?  :-\ 

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Georeferenziazione interna ad un'area
« Risposta #8 il: 06 Dicembre 2011, 14:02:43 CET »
0
Come ti ho detto sopra, capire se un punto è all'interno di un poligono complesso è un problema non banale di geometria analitica, la cui soluzione dipende anche dalla complessità del poligono (per esempio se non è convesso è ancora più complicato). Prova a guardare questi metodi: Determining if a point lies on the interior of a polygon .

Secono me conviene semplificare il problema: se non ti va bene definire le aree come gruppi di cerchi, puoi sempre definire le aree come gruppi di quadrati o addirittura triangoli, per i quali esistono algoritmi per la soluzione del problema da te posto.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline nat75

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Georeferenziazione interna ad un'area
« Risposta #9 il: 07 Dicembre 2011, 09:20:49 CET »
0
Intanto ti ringrazio per le dritte che mi hai dato.
Ho preso l'algoritmo che si trova nel link che mi hai passato e, per semplicità, l'ho modificato per farlo girare in PHP con coordinate di latitudine e longitudine.

Anche con forme complesse funziona benissimo.. ho fatto diversi test ed è tutto ok!

Ti faccio sapere se cisaranno sviluppi.. anche perchè.. essendo "pivellino" sicuramente avrò bisogno di un pò di aiuto su Android!  :-)

Grazie ancora.

Offline ghiro90

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Next Turbo
  • Sistema operativo:
    Mac OS X
Re:Georeferenziazione interna ad un'area
« Risposta #10 il: 30 Maggio 2012, 16:38:27 CEST »
0
ciao, poiché sto creando un app che tramite localizzazione del GPS rileva la posizione e voglio far scattare un evento quando si trova fuori da un raggio d'azione pre impostato vorrei capire come hai fatto, saresti così gentile da aiutarmi? grazie!!!

Offline nat75

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Georeferenziazione interna ad un'area
« Risposta #11 il: 04 Giugno 2012, 17:41:24 CEST »
0
Ciao,
non ho fatto granchè in realtà.
Come ho spiegato precedentemente, ho semplicemente preso l'algoritmo dal link che mi ha passato bradipao e l'ho riscritto in PHP per testarlo.. e funziona.

L'algoritmo è il seguente 

Codice (XML): [Seleziona]
#define MIN(x,y) (x < y ? x : y)
#define MAX(x,y) (x > y ? x : y)
#define INSIDE 0
#define OUTSIDE 1

typedef struct {
   double x,y;
} Point;

int InsidePolygon(Point *polygon,int N,Point p)
{
  int counter = 0;
  int i;
  double xinters;
  Point p1,p2;

  p1 = polygon[0];
  for (i=1;i<=N;i++) {
   p2 = polygon[i % N];
   if (p.y > MIN(p1.y,p2.y)) {
      if (p.y <= MAX(p1.y,p2.y)) {
       if (p.x <= MAX(p1.x,p2.x)) {
         if (p1.y != p2.y) {
           xinters = (p.y-p1.y)*(p2.x-p1.x)/(p2.y-p1.y)+p1.x;
           if (p1.x == p2.x || p.x <= xinters)
             counter++;
         }
       }
     }
   }
   p1 = p2;
 }

 if (counter % 2 == 0)
   return(OUTSIDE);
 else
   return(INSIDE);
}