2009-09-02 1 views
5

Ho una serie di punti che voglio trasformare in un poligono chiuso in Java. Attualmente sto cercando di utilizzare java.awt.geom.Point2D e java.awt.geom.Area ma non riesco a capire come trasformare un gruppo di punti in un'area.Convertire un elenco java.awt.geom.Point2D in un file java.awt.geom.Area

Penso di poter definire un set di Line2D in base ai punti e quindi aggiungerli alle Aree, ma è molto lavoro e sono pigro. Quindi c'è un modo più semplice per andare.

Il problema è che ho una lista di coordinate lat/lon e voglio costruire un'area che posso usare per il test di successo.

Anche le librerie Java non core sono una possibilità.

Aggiornamento, ho guardato utilizzando java.awt.Polygon ma supporta solo ints e sto operando con il doppio per le coordinate.

risposta

3

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4077518

sentito, "cliente"? Dovresti usare GeneralPath, anche se l'assenza di Polygon2D dalla fine degli anni '90 è un ovvio buco di dimensioni monster-truck nell'API.

+1

Avviso c'è un'implementazione Polygon2D galleggianti intorno che originariamente provenivano dalla UI Berkeley lab: http://www.google.com/url?sa=t&source=web&ct=res&cd=5&url=http%3A%2F%2Fptolemy.eecs.berkeley.edu%2F~ptII%2FptolemyII%2FptIIlatest%2FptII% 2Fdiva% 2Futil% 2Fjava2d% 2FPolygon2D.java & ei = BNSeSqr3O4y4M7eMmIwC & USG = AFQjCNErxCV1f6zlpi60FEqPkgG1rAfx5A & SIG2 = eWfBVNHxVQzY1eJ3DZvC1Q – M1EK

+1

meglio link: http://ptolemy.eecs.berkeley.edu/~ptII/pto lemyII/ptIIlatest/ptII/diva/util/java2d/ – M1EK

+0

'GeneralPath' è una classe precedente ormai. Vedi [questa domanda e le risposte per alcune alternative] (http://stackoverflow.com/q/11465330/935676). Possiamo festeggiare il 20 ° anniversario di questo bug a settembre;) – amoebe

1

Se si sta effettivamente lavorando con valori lat/lon di Geodetic, è possibile utilizzare effettivamente OpenMap per eseguire alcune delle operazioni. Ho appena trascorso un po 'di tempo usando lo Geo class in quell'API per far rimbalzare un oggetto attorno a un'area definita da un poligono di punti lat/lon. Ci sono intersection calls e tutto e tutti i calcoli vengono eseguiti in modo sferico in modo che i punti siano più corretti per quanto riguarda le proiezioni.

0

La cosa più semplice (e più pigra) da fare è creare un riquadro di delimitazione dei punti dal massimo e dal minimo dei valori di ordinata X, Y.

Se avete bisogno di una più stretta forma quindi piuttosto che escogitare il proprio algoritmo, questo potrebbe essere un buon punto di partenza: