Ho una mappa che ho convertito da un grafico raster in un file SVG convertendo le aree diversamente colorate in tracciati.Punto in poligono controlla con SVG e JavaScript?
so come fare un controllo di base punto-a-poligono dato un array di spigoli, ma gli svg:path
elementi rappresentano più poligoni e maschere (per tenere conto mari ecc) e l'estrazione di tali informazioni analizzando l'attributo d
sembra piuttosto pesante.
C'è una libreria JS che mi consente di semplificare tale controllo? Fondamentalmente voglio creare punti casuali e quindi verificare se sono a terra (cioè all'interno dei poligoni) o acqua (cioè all'esterno).
Dato che gli elementi SVG sembrano consentire la gestione degli eventi del mouse, ritengo che questo non dovrebbe essere un grosso problema (ad esempio, se si può stabilire se il puntatore del mouse si trova sopra un elemento, si sta già risolvendo il problema problema point-in-poligono).
EDIT: A complicare la questione un po ', devo dire che gli elementi svg:path
sembrano essere basate su curve anziché linee, quindi basta parsing l'attributo d
per creare una matrice di bordi non sembra essere un'opzione.
Poiché gli elementi possono assumere un attributo fill
, un approccio ghetto di rendering dell'SVG su una tela e quindi di trovare il valore del colore del pixel nel punto specificato potrebbe funzionare, ma sembra un modo davvero, davvero terribile di fallo.
Dopo aver lavorato con le specifiche SVG e aver trascorso un'ora con la console JavaScript di Chrome, sembra che il problema più grande sia che ho un elemento 'svg: percorso' piuttosto che un elemento forma regolare. Altrimenti potrebbe essere possibile usare 'svg.checkIntersection' con 1x1' svg: rect' (supponendo che funzioni per le aree piuttosto che per i contorni). L'API SVG sembra essere di scarso aiuto se stai cercando qualsiasi forma di astrazione. –