2013-01-17 13 views
5

Ist es möglich, einen EventListener in einem gezeichneten Polygon in einem Osmdroid MapView Overlay zu setzen? Ich möchte auf ein Overlay drucken und nachdem ich es berührt habe, möchte ich seine Farbe ändern oder Daten hinter einem Polygon behandeln.Wie man ein Polygon auf MapView zeichnet, füllt es und setzt ein onTouch Event darauf

Zum Beispiel:

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

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

Nach dem Berühren in Poly1 möchte ich wissen, aha ID 1337 gedrückt wird. Ich möchte seine Farbe ändern.

Wie könnte ich ein solches Verhalten implementieren?

+0

gefunden werden können Sie folgenden Link für Zeichnen Polylinie auf der Karte folgen. https://stackoverflow.com/questions/39454857/how-to-buffer-a-polyline-in-android-oder-draw-a-polygon-around-a-polyline/42664925#42664925 –

Antwort

0

Verwenden this Dokumentation der Polygone

Verwenden this hört für Karte zu zeichnen klickt

Verwenden this, um zu bestimmen, ob eine Berührung innerhalb eines der Polygone ist

Ich bin nicht sicher Diese Geometriebibliothek kann auf Android ausgeführt werden, also können Sie die dritte Komponente problemlos ersetzen.

EDIT:

die Frage falsch verstanden und es mit Google Maps verbunden sind, sorry.

+0

Sorry, ich arbeite mit Osmdroid, Sie kommen mit der Google API. Ich habe bereits ein Polygon gezeichnet, und ich weiß, wie ich die Position eines OnTouch-Events erreichen kann. Ist die einzige Möglichkeit festzustellen, ob sich die Berührung in einem Polygon gegenüber Geometrie-Bibliotheken befindet? Ich hoffte, dass die Leinwand vielleicht ihre Zeichnungen kennt und einen Klick auf eine Zeichnung bestimmen kann :(Nicht der Fall? –

+0

Oh, Entschuldigung ... übersehen, dass OSMDroid thingy. Der Punkt ist, dass Kartenbibliotheken genau das sind, ihr Umfang nicht enthält Geometrie direkt/als Feature also yeah, du musst es irgendwie selbst bereitstellen, aber es lohnt sich trotzdem, die Dokumentation für deine Kartenbibliothek zu überprüfen – Machinarius

+0

Ok, ich werde einen Blick in JTS werfen und es verwenden, um das Polygon zu erhalten, das berührt wird Ich denke, dass ich mein Problem lösen werde :) Danke –

0

Hier ist, wie ein Polygon (Rechteck Beispiel) zu ziehen und zu füllen:

Array bgRectPoints = new Array <>();

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); 

Um touch/Tap initialisieren Polygon wie folgt zu erhalten:

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); 
     } 
    }; 

Mehr here