Revision 39076 branches/v2_0_0_prep/libraries/libFMap_geometries/src/org/gvsig/fmap/geom/operation/tojts/MultiCurveToJTS.java

View differences:

MultiCurveToJTS.java
27 27
 
28 28
package org.gvsig.fmap.geom.operation.tojts;
29 29

  
30
import java.util.ArrayList;
31
import java.util.List;
32

  
33
import com.vividsolutions.jts.geom.LineString;
34
import com.vividsolutions.jts.geom.MultiLineString;
35

  
36
import org.slf4j.Logger;
37
import org.slf4j.LoggerFactory;
38

  
30 39
import org.gvsig.fmap.geom.Geometry;
31 40
import org.gvsig.fmap.geom.aggregate.MultiCurve;
32 41
import org.gvsig.fmap.geom.operation.GeometryOperationContext;
33 42
import org.gvsig.fmap.geom.operation.GeometryOperationException;
34 43
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
35
import org.gvsig.fmap.geom.primitive.Point;
36 44

  
37
import com.vividsolutions.jts.geom.Coordinate;
38
import com.vividsolutions.jts.geom.LineString;
39
import com.vividsolutions.jts.geom.MultiLineString;
40

  
41 45
/**
42 46
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
43 47
 */
44 48
public class MultiCurveToJTS extends ToJTS{
49
    
50
    private static Logger logger = LoggerFactory.getLogger(MultiCurveToJTS.class);
45 51
	/*
46 52
	 * (non-Javadoc)
47 53
	 * @see org.gvsig.fmap.geom.operation.tojts.ToJTS#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
......
52 58
			srid = ((JTSGeometryOperationContext)ctx).getSrid();
53 59
		}
54 60
		MultiCurve multiCurve = (MultiCurve)geom;
55
		LineString[] lines = new LineString[multiCurve.getPrimitivesNumber()];
56
        for (int i = 0; i < lines.length; i++){
61
		Object item = null;
62
		List ls_list = new ArrayList();
63

  
64
		int prim_n = multiCurve.getPrimitivesNumber();
65
		
66
        for (int i = 0; i < prim_n; i++){
57 67
        	try {
58
				lines[i] = (LineString) multiCurve.getPrimitiveAt(i).invokeOperation(CODE, ctx);
68
        	    item = multiCurve.getPrimitiveAt(i).invokeOperation(CODE, ctx);
69
        	    
70
        	    if (item instanceof MultiLineString) {
71
        	        
72
                    /*
73
                     * A multilinestring can also be returned
74
                     */
75
        	        MultiLineString mls = (MultiLineString) item;
76
        	        for (int k = 0; k<mls.getNumGeometries(); k++) {
77
        	            com.vividsolutions.jts.geom.Geometry p = mls.getGeometryN(k);
78
        	            if (p instanceof LineString) {
79
        	                ls_list.add(item);
80
        	            } 
81
        	        }
82
        	        
83
        	    } else {
84
                    if (item instanceof LineString) {
85
                        /*
86
                         * Including primitives converted to linestring.
87
                         * Short primitives can return a point
88
                         */
89
                        ls_list.add(item);
90
                    } else {
91
                        String txt = (item == null) ? "NULL" : item.getClass().getName();
92
                        logger.info("Warning: excluding primitive in MultiCurveToJTS because it converted to a JTS " + txt);
93
                    }
94
        	    }
95
        	    
59 96
			} catch (GeometryOperationNotSupportedException e) {
60 97
				throw new GeometryOperationException(e);
61 98
			}
62 99
        }
100

  
101
        LineString[] lines = (LineString[]) ls_list.toArray(new LineString[0]);
102

  
63 103
        MultiLineString lineString = new com.vividsolutions.jts.geom.GeometryFactory().createMultiLineString(lines);
64 104
        lineString.setSRID(srid);
65 105
        return lineString;

Also available in: Unified diff