Revision 47644
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gml/GeometryStrategiesGML3.java | ||
---|---|---|
14 | 14 |
import com.vividsolutions.jts.geom.MultiPolygon; |
15 | 15 |
import com.vividsolutions.jts.geom.Polygon; |
16 | 16 |
import com.vividsolutions.jts.io.gml2.GMLConstants; |
17 |
import com.vividsolutions.jts.operation.linemerge.LineMerger; |
|
17 | 18 |
import java.util.HashMap; |
18 | 19 |
import java.util.List; |
20 |
import org.apache.commons.collections4.CollectionUtils; |
|
19 | 21 |
import org.apache.commons.lang3.StringUtils; |
20 | 22 |
import org.apache.commons.lang3.tuple.ImmutablePair; |
21 | 23 |
import org.apache.commons.lang3.tuple.Pair; |
22 |
import org.gvsig.fmap.geom.aggregate.MultiLine; |
|
23 | 24 |
import static org.gvsig.fmap.geom.jts.gml.GeometryStrategies.getSrid; |
24 | 25 |
import org.xml.sax.SAXException; |
25 | 26 |
|
... | ... | |
34 | 35 |
|
35 | 36 |
GeometryStrategies.ParseStrategy oneChild = new GeometryStrategies.ParseStrategy() { |
36 | 37 |
|
38 |
@Override |
|
37 | 39 |
public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException { |
38 | 40 |
if (arg.children.size() != 1) { |
39 | 41 |
throw new SAXException("Geometry Members may only contain one geometry."); |
... | ... | |
47 | 49 |
|
48 | 50 |
GeometryStrategies.ParseStrategy manyChilds = new GeometryStrategies.ParseStrategy() { |
49 | 51 |
|
52 |
@Override |
|
50 | 53 |
public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException { |
51 | 54 |
return arg.children; |
52 | 55 |
} |
... | ... | |
71 | 74 |
|
72 | 75 |
strats.put("posList".toLowerCase(), new GeometryStrategies.ParseStrategy() { |
73 | 76 |
|
77 |
@Override |
|
74 | 78 |
public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException { |
75 | 79 |
if (arg.text == null || "".equals(arg.text)) { |
76 | 80 |
throw new SAXException("Cannot create a coordinate sequence without text to parse"); |
... | ... | |
113 | 117 |
|
114 | 118 |
strats.put("PolygonPatch".toLowerCase(), new GeometryStrategies.ParseStrategy() { |
115 | 119 |
|
120 |
@Override |
|
116 | 121 |
public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException { |
117 | 122 |
Object exterior = arg.children.get(0); |
118 | 123 |
Object interior = null; |
... | ... | |
125 | 130 |
|
126 | 131 |
strats.put("patches".toLowerCase(), new GeometryStrategies.ParseStrategy() { |
127 | 132 |
|
133 |
@Override |
|
128 | 134 |
public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException { |
129 | 135 |
return arg.children; |
130 | 136 |
} |
... | ... | |
132 | 138 |
|
133 | 139 |
strats.put("Surface".toLowerCase(), new GeometryStrategies.ParseStrategy() { |
134 | 140 |
|
141 |
@Override |
|
135 | 142 |
public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException { |
136 | 143 |
|
137 | 144 |
List<Pair<LinearRing,List<LinearRing>>> patches = (List<Pair<LinearRing,List<LinearRing>>>) arg.children.get(0); |
... | ... | |
159 | 166 |
|
160 | 167 |
strats.put("MultiSurface".toLowerCase(), new GeometryStrategies.ParseStrategy() { |
161 | 168 |
|
169 |
@Override |
|
162 | 170 |
public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException { |
163 | 171 |
|
164 | 172 |
List<Polygon> polygons = arg.children; |
... | ... | |
176 | 184 |
|
177 | 185 |
strats.put("MultiCurve".toLowerCase(), new GeometryStrategies.ParseStrategy() { |
178 | 186 |
|
187 |
@Override |
|
179 | 188 |
public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException { |
180 | 189 |
|
181 | 190 |
List<LineString> curves = arg.children; |
... | ... | |
189 | 198 |
} |
190 | 199 |
}); |
191 | 200 |
|
201 |
|
|
202 |
strats.put("segments".toLowerCase(), manyChilds); |
|
203 |
strats.put("LineStringSegment".toLowerCase(), oneChild); |
|
204 |
|
|
205 |
strats.put("Curve".toLowerCase(), new GeometryStrategies.ParseStrategy() { |
|
192 | 206 |
|
207 |
@Override |
|
208 |
public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException { |
|
209 |
|
|
210 |
//Curve/segments/LineStringSegment/posList |
|
211 |
|
|
212 |
LineString curve = null; |
|
213 |
List<CoordinateSequence> segments = (List<CoordinateSequence>) arg.children.get(0); |
|
214 |
if (CollectionUtils.isNotEmpty(segments)) { |
|
215 |
CoordinateSequence segment = segments.get(0); |
|
216 |
if (segment != null) { |
|
217 |
curve = gf.createLineString(segment); |
|
218 |
} |
|
219 |
} |
|
220 |
return curve; |
|
221 |
} |
|
222 |
}); |
|
223 |
|
|
224 |
strats.put("Ring".toLowerCase(), new GeometryStrategies.ParseStrategy() { |
|
225 |
|
|
226 |
@Override |
|
227 |
public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException { |
|
228 |
|
|
229 |
//Ring/curveMember/LineString/posList |
|
230 |
|
|
231 |
LineMerger merger = new LineMerger(); |
|
232 |
List<LineString> segments = (List<LineString>) arg.children;//.get(0); |
|
233 |
for (LineString segment : segments) { |
|
234 |
merger.add(segment); |
|
235 |
} |
|
236 |
List<LineString> merged = (List<LineString>) merger.getMergedLineStrings(); |
|
237 |
return gf.createLinearRing(merged.get(0).getCoordinateSequence()); |
|
238 |
} |
|
239 |
}); |
|
240 |
|
|
193 | 241 |
return strats; |
194 | 242 |
|
195 | 243 |
} |
Also available in: Unified diff