2013-01-17 17 views
5

E 'possibile impostare un EventListener in un poligono disegnato in un overlay MapView osmdroid? Vorrei stampare su una sovrapposizione e dopo averlo toccato vorrei cambiare il suo colore o gestire i dati dietro un poligono.Come disegnare un poligono su MapView, riempirlo e mettere un evento onTouch su di esso

Per esempio:

POLY1: ID = 1337 P1 (0,0), P2 (1,0), ......, Pn (0,0)

Poly2: ID = 42, P1 (10,7), P2 (18,39), ......, Pn (10,7)

Dopo aver toccato in Poly1, desidero sapere che è stato premuto un ID 1337. Un desiderio di cambiare il suo colore.

Come è possibile implementare un comportamento del genere?

+0

È possibile seguire il collegamento sotto per disegnare Polyline sulla mappa. https://stackoverflow.com/questions/39454857/how-to-buffer-a-polyline-in-android-or-draw-a-polygon-around-a-polyline/42664925#42664925 –

risposta

0

Usa this documentazione per disegnare i poligoni

Utilizzare this di ascoltare per la mappa scatta

Usa this per determinare se un tocco è all'interno di uno dei poligoni

non sono sicuro quella libreria geometrica può essere eseguita su Android, quindi sentiti libero di sostituire il terzo componente.

EDIT:

Misread la questione e associato con google maps, mi spiace.

+0

Siamo spiacenti, sto lavorando con osmdroid, vieni con l'API di Google. Ho già disegnato un poligono e so come ottenere la posizione di un evento OnTouch. L'unico modo per determinare se il tocco era in un poligono rispetto all'uso di libarys geometriche? Speravo che la tela forse conoscesse i suoi disegni e che fosse in grado di determinare un colpo su un disegno :(Non è il caso? –

+0

Oh, mi dispiace ... ho trascurato quel qualcosa di OSMDroid. Il punto è che le librerie di mappe sono proprio così, il loro scopo non include la geometria direttamente/come una caratteristica quindi sì, è necessario fornirla in qualche modo.Esso vale comunque la verifica della documentazione per la tua libreria di mappe. – Machinarius

+0

Ok darò un'occhiata in JTS e usarla per ottenere il poligono che viene toccato. penso che risolverò il mio problema :) Grazie –

0

Ecco come disegnare e riempire un poligono (ad esempio rettangolo):

bgRectPoints ArrayList = new ArrayList <>();

GeoPoint pt1 = new GeoPoint(-15.953548, 126.036911); 
    bgRectPoints.add(pt1); 
    GeoPoint pt2 = pt1.destinationPoint(10000, 0); 
    bgRectPoints.add(pt2); 
    GeoPoint pt3 = pt2.destinationPoint(10000, 90); 
    bgRectPoints.add(pt3); 
    GeoPoint pt4 = pt3.destinationPoint(10000, 180); 
    bgRectPoints.add(pt4); 
    bgRectPoints.add(pt1); 

    Polygon polygon = new Polygon(); 
    polygon.setPoints(bgRectPoints); 
    polygon.setFillColor(Color.BLACK); 

    mapView.getOverlays().add(polygon); 

Per ricevere tocco/Tap inizializzare poligono in questo modo:

Polygon polygon = new Polygon(){ 
     @Override 
     public boolean onSingleTapConfirmed(MotionEvent event, MapView mapView) { 
      Toast.makeText(context, "Polygon clicked!",Toast.LENGTH_SHORT).show(); 
      return super.onSingleTapConfirmed(event, mapView); 
     } 
    }; 

più può essere trovato here

Problemi correlati