svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libGeocoding / src / org / gvsig / geocoding / geommatches / PolygonMatcher.java @ 26883
History | View | Annotate | Download (1.94 KB)
1 | 26845 | vsanjaime | package org.gvsig.geocoding.geommatches; |
---|---|---|---|
2 | |||
3 | import java.util.ArrayList; |
||
4 | import java.util.HashMap; |
||
5 | import java.util.Iterator; |
||
6 | 26883 | vsanjaime | import java.util.List; |
7 | 26845 | vsanjaime | import java.util.Map; |
8 | |||
9 | import org.gvsig.fmap.geom.Geometry; |
||
10 | import org.gvsig.fmap.geom.primitive.Point2D; |
||
11 | |||
12 | import com.vividsolutions.jts.algorithm.InteriorPointArea; |
||
13 | |||
14 | public class PolygonMatcher extends GeomMatcher { |
||
15 | |||
16 | /**
|
||
17 | * This method match the centroids (Point2D) of polygons. If there are some
|
||
18 | * multipolygon in the result features the centroid will be a MultiPoint
|
||
19 | */
|
||
20 | @Override
|
||
21 | public Geometry[] match() { |
||
22 | |||
23 | HashMap polys = groupFeaturesByAttribute(this.getGroupFieldPosition(), |
||
24 | 26883 | vsanjaime | (List) this.getFeatures().get(0)); |
25 | 26845 | vsanjaime | Iterator it = polys.entrySet().iterator();
|
26 | Geometry[] mPoints = new Geometry[polys.size()]; |
||
27 | int position = 0; |
||
28 | while (it.hasNext()) {
|
||
29 | Map.Entry e = (Map.Entry) it.next(); |
||
30 | ArrayList geomss = (ArrayList) e.getValue(); |
||
31 | 26883 | vsanjaime | |
32 | 26845 | vsanjaime | // Insert geometries of one street into array
|
33 | Geometry[] arrGeoms = new Geometry[geomss.size()]; |
||
34 | for (int i = 0; i < geomss.size(); i++) { |
||
35 | 26883 | vsanjaime | Geometry ggeom = (Geometry) geomss.get(i); |
36 | 26845 | vsanjaime | arrGeoms[i] = ggeom; |
37 | } |
||
38 | // Parse geometries to JTS
|
||
39 | com.vividsolutions.jts.geom.Geometry[] geomsjts = parseGeomsToJTS(
|
||
40 | geomss.get(0).getClass(), arrGeoms);
|
||
41 | // Get centroid of polygon or polygons
|
||
42 | for (int j = 0; j < geomsjts.length; j++) { |
||
43 | Point2D pts = getCenterOfPolygon(geomsjts[j]);
|
||
44 | mPoints[position] = pts; |
||
45 | position++; |
||
46 | 26883 | vsanjaime | } |
47 | 26845 | vsanjaime | } |
48 | return mPoints;
|
||
49 | } |
||
50 | |||
51 | /**
|
||
52 | * This method calculate the centroid of one polygon. Always the centroid
|
||
53 | * will be within the polygon.
|
||
54 | *
|
||
55 | * @param geomjts
|
||
56 | * @return
|
||
57 | */
|
||
58 | private Point2D getCenterOfPolygon( |
||
59 | com.vividsolutions.jts.geom.Geometry geomjts) { |
||
60 | |||
61 | InteriorPointArea centro = new InteriorPointArea(geomjts);
|
||
62 | com.vividsolutions.jts.geom.Point pto = geomjts.getInteriorPoint(); |
||
63 | |||
64 | return new Point2D(pto.getX(), pto.getY()); |
||
65 | } |
||
66 | |||
67 | } |