2013-01-17 14 views
5

Czy jest możliwe ustawienie obiektu EventListener w narysowanym wielokącie w nakładce MapView firmy osmdroid? Chciałbym wydrukować na nakładce i po jej dotknięciu chciałbym zmienić jej kolor lub obsłużyć dane za wielokątem.Jak narysować wielokąt na MapView, wypełnić go i umieścić na nim zdarzenie onTouch

Na przykład:

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

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

Po dotknięciu w Poly1 chcę wiedzieć aha ID 1337 jest wciśnięty. Chęć zmiany koloru.

Jak mogę wprowadzić takie zachowanie?

+0

Możesz śledzić poniżej linku do rysowania polilinii na mapie. https://stackoverflow.com/questions/39454857/how-to-buffer-a-polyline-in-android-or-draw-a-polygon-around-a-polyline/42664925#42664925 –

Odpowiedz

0

Zastosowanie this dokumentacja do rysowania wielokątów

Wpisz this słuchać na mapie kliknie

Zastosowanie this celu ustalenia, czy dotyk jest w środku jednego z wielokątów

nie jestem pewien ta biblioteka geometrii może działać na Androidzie, więc możesz wymienić trzeci komponent.

EDIT:

misread pytanie wiąże się to z google maps, przepraszam.

+0

Przepraszam, pracuję z osmdroid, dołączasz do Google API. Wyciągnąłem już wielokąt i wiem, jak uzyskać pozycję zdarzenia OnTouch. Czy jest to jedyny sposób, aby określić, czy dotyk był w Wieloboku nad wykorzystaniem geometrii libarys? Miałem nadzieję, że płótno może zna jego rysunki i może określić klick na rysunku :(Nie w tym przypadku? –

+0

Och, przepraszam ... przeoczyłem tę sprawę z OSMDroidem. Chodzi o to, że biblioteki map są właśnie tym, ich zakres nie obejmuje geometria bezpośrednio/jako cecha, więc tak, musisz to jakoś dostarczyć, warto jednak przejrzeć dokumentację dla twojej biblioteki map – Machinarius

+0

Ok, zajrzę w JTS i użyję go, by uzyskać dotknięty wielokąt. Myślę, że rozwiążę mój problem :) Dzięki –

0

Oto jak rysować i wypełnić prostokąt wielobok (przykład):

ArrayList bgRectPoints = 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); 

Aby otrzymać touch/Tap zainicjować wielokąt tak:

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

Więcej można znaleźć here

Powiązane problemy