Mam mapę, którą przekonwertowałem z grafiki rastrowej na plik SVG, konwertując obszary o różnym zabarwieniu na ścieżki.Punkt w sprawdzaniu wieloboków za pomocą SVG i JavaScript?
wiem jak zrobić podstawowe Check Point-in-wielokąta daną tablicą krawędzi, ale svg:path
elementy reprezentować wiele wielokątów, a także maski (aby uwzględnić morzach etc) i wydobywania informacji poprzez analizowanie atrybut d
wydaje się dość ciężki.
Czy istnieje biblioteka JS, która pozwala mi uprościć tę kontrolę? Zasadniczo chcę tworzyć losowe punkty, a następnie sprawdzać, czy są na lądzie (tj. Wewnątrz wielokątów) lub wodzie (to znaczy na zewnątrz).
Ponieważ elementy SVG wydają się pozwalać na obsługę zdarzeń myszy, myślę, że nie powinno to stanowić większego problemu (np. Jeśli potrafisz stwierdzić, czy wskaźnik myszy znajduje się nad elementem, już rozwiązujesz problem z punktem w wielokącie).
EDIT: sprawa komplikuje się nieco, należy wspomnieć, że svg:path
elementy wydają się być oparte na krzywych liniach, a nie, więc po prostu parsowania atrybutu d
utworzyć tablicę krawędzi nie wydaje się być rozwiązaniem.
Ponieważ elementy mogą mieć atrybut fill
, podejście getta polegające na renderowaniu SVG na płótnie, a następnie znajdowaniu wartości koloru piksela w danym punkcie, może działać, ale wydaje się to naprawdę, naprawdę okropnym sposobem Zrób to.
Po przepracowaniu specyfikacji SVG i spędzeniu godziny z konsolą JavaScript w Chrome wydaje się, że największym problemem jest to, że mam element 'svg: path' zamiast zwykłego elementu shape. W przeciwnym razie może być możliwe użycie 'svg.checkIntersection' z 1x1' svg: rect' (zakładając, że działa dla obszarów zamiast konturów). Interfejs SVG API wydaje się mało przydatny, jeśli szukasz jakiejkolwiek formy abstrakcji. –