Bonjour a tous,
Je pose beaucoup de questions en ce moment mais à chaque fois que je crois avoir progressé, un probleme arrive.
Cette fois si c'est sur l'affichage de mes polygons que j'ai un probleme.
Je vous explique mon programme en 3 mots:
Je recupère des données Geometry d'une base de données donc du type:
et je les affiches, mon programme permet aussi de les modifier, bouger, créer etc...MULTIPOLYGON (((640 93, 809 214, 589 314, 640 93),
(657 152, 747 199, 629 246, 657 152),
(672 130, 711 151, 707 171, 672 130)))
Jusqu'à maintenant j'arrive a afficher un MultiPolygon avec 1 trou comme dans la premiere piece jointe. j'arrive aussi à la créer editer etc...
Mais dès que je met un deuxieme trou (piece jointe 2) un troisieme trou se crée entre le premier point du polygon mere, le premier point du premier trou et le premier point du troisieme trou![]()
Je vous copie/colle mon code permettant d'afficher le polygone:
Voila, je precise que j'utilise PostGIS pour lire les données GEOMETRY et recupérer les points.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public void paint(Graphics g,int rendu) { Graphics2D g2 = (Graphics2D)g; if(rendu==JCanvas.ANTIALIASING) g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(color); try { PGgeometry geom = new PGgeometry(polygon); org.postgis.MultiPolygon pl = (org.postgis.MultiPolygon)geom.getGeometry(); int numPolygons = pl.numPolygons(); for(int r=0;r<numPolygons;r++) { org.postgis.Polygon plg = pl.getPolygon(r); int numRings = plg.numRings(); int totalPoints = 0; for(int p=0;p<numRings;p++) { org.postgis.LinearRing rng = plg.getRing(p); totalPoints = totalPoints + rng.numPoints(); } int[] x = new int[totalPoints]; int[] y = new int[totalPoints]; int compteurPoints=0; for(int p=0;p<numRings;p++) { org.postgis.LinearRing rng = plg.getRing(p); int numPoints = rng.numPoints(); for(int q=0;q<numPoints;q++) { org.postgis.Point pt = rng.getPoint(q); x[compteurPoints]=(int)pt.x; y[compteurPoints]=(int)pt.y; compteurPoints++; } } g.fillPolygon(x,y,x.length); } }
J'appelle aussi g.fillPolygon() avec tous les points precedents à la fin de la boucle des polygones vu que mes données sont "MULTIPOLYGON(...)".
Voila, j'espere avoir été clair, merci beaucoup de m'aider.
Partager