Pierwszym etapem jest usuwanie pojedynczego punktu z linii. Obiekt GPolyline ma do dyspozycji serię metod związanych z punktami - główną częścią w nazwie jest 'Vertex' - getVertex, getVertexCount, insertVertex, deleteVertex. W naszym przypadku interesująca jest ostatnia funkcja - wystarczy podać indeks punktu i zostanie on usunięty.
c.line.deleteVertex(c.index);
Pewnym problemem jest natomiast obsłużenie zdarzenia kliknięcia prawego przycisku - ponieważ do linii nie można przyłączyć tego zdarzenia - a jedynie do mapy. Funkcja obsługująca zdarzenie singlerightclick przymuje trzy paramtery:
- współrzędne punktu, gdzie zostało kliknięte
- uchwyt do elementu mapy w DOM
- jeżeli został kliknięty jakiś element na mapie (np. warstwa GOverlay), wówczas ten parametr go zawiera, w innych przypadkach jest równy null
Niestety zarówno kliknięcie w punkt na wierzchołku jak i punkt pomocniczy pomiędzy punktami powoduje otrzymanie tych samych informacji - można to obejść poprzez sprawdzenie otrzymanych współrzędnych (getLatLng) oraz wierzchołka z linii z oznaczonych indeksem.
Dodatkowym zabezpieczeniem przed wykonaniem deleteVertex w momencie, kiedy kliknięty został element nie będący wierzchołkiem jest sprawdzenie czy trzeci parametr jest różny od null, czy posiada właściowść line oraz czy posiada właściwość index, która jest liczbą.
W ten sposób uzyskujemy całą funkcją do obsługi zdarzenia kliknięcia prawego przycisku myszy - wystarczy ten kawałek kodu dodać do funkcji inicjalizującej.
GEvent.addListener(map, 'singlerightclick', function(a,b,c) { if (c != null && typeof c.line == "object" && typeof c.index == "number") { var vertex = c.line.getVertex(c.index); var point = c.getLatLng(); if(vertex.lat() == point.lat() && vertex.lng() == point.lng()) { c.line.deleteVertex(c.index); } } });
Nowa linia
Brak komentarzy:
Prześlij komentarz