Revision 4483

View differences:

org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/rule/PointMustBeProperlyInsidePolygonRule.java
24 24
package org.gvsig.topology.rule;
25 25

  
26 26
import org.gvsig.expressionevaluator.Expression;
27
import org.gvsig.expressionevaluator.ExpressionBuilder;
28
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
29
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
30 27
import org.gvsig.expressionevaluator.ExpressionUtils;
31 28
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
32 29
import org.gvsig.expressionevaluator.GeometryExpressionUtils;
......
39 36
import org.gvsig.tools.dynobject.DynObject;
40 37
import org.gvsig.tools.i18n.I18nManager;
41 38
import org.gvsig.tools.task.SimpleTaskStatus;
42
import org.gvsig.topology.lib.spi.AbstractTopologyRule;
43
import org.gvsig.topology.lib.spi.AbstractTopologyRuleAction;
44 39
import org.gvsig.topology.lib.api.ExecuteTopologyRuleActionException;
45 40
import org.gvsig.topology.lib.api.TopologyDataSet;
46 41
import org.gvsig.topology.lib.api.TopologyPlan;
......
48 43
import org.gvsig.topology.lib.api.TopologyReportLine;
49 44
import org.gvsig.topology.lib.api.TopologyRule;
50 45
import org.gvsig.topology.lib.api.TopologyRuleFactory;
46
import org.gvsig.topology.lib.spi.AbstractTopologyRule;
47
import org.gvsig.topology.lib.spi.AbstractTopologyRuleAction;
51 48

  
52 49
/**
53 50
 *
......
107 104
                this.expressionBuilder = GeometryExpressionUtils.createExpressionBuilder();
108 105
                this.geomName = store2.getDefaultFeatureType().getDefaultGeometryAttributeName();
109 106
            }
107
            double theTolerance = getTolerance();
110 108
            Geometry point = feature1.getDefaultGeometry();
111 109
            TopologyDataSet theDataSet2 = this.getDataSet2();
112 110
            if (theDataSet2.getSpatialIndex() != null) {
......
114 112
                for (FeatureReference featureReference : theDataSet2.query(point)) {
115 113
                    Feature feature2 = featureReference.getFeature();
116 114
                    Geometry otherPolygon = feature2.getDefaultGeometry();
115
                    if(theTolerance > 0){
116
                        otherPolygon = otherPolygon.buffer(theTolerance);
117
                    }
117 118
                    if( otherPolygon!=null && otherPolygon.contains(point) ) {
118 119
                        contained = true;
119 120
                        break;
......
133 134
                    );
134 135
                }
135 136
            } else {
136
                this.expression.setPhrase(
137
                        this.expressionBuilder.ifnull(
138
                                this.expressionBuilder.column(this.geomName),
139
                                this.expressionBuilder.constant(false),
140
                                this.expressionBuilder.ST_Contains(
141
                                        this.expressionBuilder.column(this.geomName),
142
                                        this.expressionBuilder.geometry(point)
143
                                )
144
                        ).toString()
145
                );
137
                
138
                if (theTolerance > 0) {
139
                    this.expression.setPhrase(
140
                            this.expressionBuilder.ifnull(
141
                                    this.expressionBuilder.column(this.geomName),
142
                                    this.expressionBuilder.constant(false),
143
                                    this.expressionBuilder.ST_Contains(
144
                                            this.expressionBuilder.ST_Buffer(
145
                                                    this.expressionBuilder.column(this.geomName),
146
                                                    this.expressionBuilder.constant(theTolerance)
147
                                            ),
148
                                            this.expressionBuilder.geometry(point)
149
                                    )
150
                            ).toString()
151
                    );
152
                } else {
153
                    this.expression.setPhrase(
154
                            this.expressionBuilder.ifnull(
155
                                    this.expressionBuilder.column(this.geomName),
156
                                    this.expressionBuilder.constant(false),
157
                                    this.expressionBuilder.ST_Contains(
158
                                            this.expressionBuilder.column(this.geomName),
159
                                            this.expressionBuilder.geometry(point)
160
                                    )
161
                            ).toString()
162
                    );
163
                }
146 164
                if (theDataSet2.findFirst(this.expression) == null) {
147 165
                    I18nManager i18n = ToolsLocator.getI18nManager();
148 166
                    report.addLine(this,
org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/rule/PolygonMustNotOverlapWithPolygonRule.java
31 31
import org.gvsig.fmap.dal.feature.FeatureReference;
32 32
import org.gvsig.fmap.dal.feature.FeatureSet;
33 33
import org.gvsig.fmap.geom.Geometry;
34
import org.gvsig.fmap.geom.GeometryUtils;
34 35
import org.gvsig.tools.ToolsLocator;
35 36
import org.gvsig.tools.dynobject.DynObject;
36 37
import org.gvsig.tools.i18n.I18nManager;
......
71 72
                FeatureReference featRef1 = line.getFeature1();
72 73
                Feature feat1 = featRef1.getFeature();
73 74
                Geometry geom1 = feat1.getDefaultGeometry();
74
                
75

  
75 76
                FeatureReference featRef2 = line.getFeature2();
76 77
                Feature feat2 = featRef2.getFeature();
77 78
                Geometry geom2 = feat2.getDefaultGeometry();
78
                
79

  
79 80
                substract(featRef1, geom2, rule.getDataSet1());
80 81
                substract(featRef2, geom1, rule.getDataSet2());
81 82
                return EXECUTE_OK;
82
                
83

  
83 84
            } catch (Exception ex) {
84 85
                throw new ExecuteTopologyRuleActionException(ex);
85 86
            }
......
106 107
                FeatureReference featRef1 = line.getFeature1();
107 108
                Feature feat1 = featRef1.getFeature();
108 109
                Geometry geom1 = feat1.getDefaultGeometry();
109
                
110

  
110 111
                FeatureReference featRef2 = line.getFeature2();
111
                
112

  
112 113
                substract(featRef2, geom1, rule.getDataSet2());
113 114
                return EXECUTE_OK;
114 115

  
......
144 145
                this.geomName = feature1.getType().getDefaultGeometryAttributeName();
145 146
            }
146 147
            Geometry polygon = feature1.getDefaultGeometry();
147
            if( polygon==null ) {
148
            if (polygon == null) {
148 149
                return;
149 150
            }
150 151
            TopologyDataSet thisDataSet = this.getDataSet1();
151 152
            TopologyDataSet otherDataSet = this.getDataSet2();
153
            double theTolerance = this.getTolerance();
152 154
            if (otherDataSet.getSpatialIndex() != null) {
153 155
                for (FeatureReference otherReference : otherDataSet.query(polygon)) {
154
//                    if (otherReference.equals(feature1.getReference())) {
155
//                        continue;
156
//                    }
157 156
                    Feature otherFeature = otherReference.getFeature();
158 157
                    Geometry otherPolygon = otherFeature.getDefaultGeometry();
159
                    double halfTolerance = this.getTolerance()/2;
160
                    if (otherPolygon!=null && polygon.buffer(-halfTolerance).overlaps(otherPolygon.buffer(-halfTolerance))) {
161
                        I18nManager i18n = ToolsLocator.getI18nManager();
162
                        Geometry error = polygon.intersection(otherPolygon);
163
                        report.addLine(this,
164
                                thisDataSet,
165
                                otherDataSet,
166
                                polygon,
167
                                error,
168
                                feature1.getReference(),
169
                                otherFeature.getReference(),
170
                                false,
171
                                i18n.getTranslation("_The_polygon_overlay_with_other")
172
                        );
158

  
159
                    if (otherPolygon != null) {
160
                        if (GeometryUtils.overlaps(polygon, otherPolygon, theTolerance)) {
161
                            I18nManager i18n = ToolsLocator.getI18nManager();
162
                            Geometry error = polygon.intersection(otherPolygon);
163
                            report.addLine(this,
164
                                    thisDataSet,
165
                                    otherDataSet,
166
                                    polygon,
167
                                    error,
168
                                    feature1.getReference(),
169
                                    otherFeature.getReference(),
170
                                    false,
171
                                    i18n.getTranslation("_The_polygon_overlay_with_other")
172
                            );
173
                        }
173 174
                    }
174 175
                }
175 176
            } else {
......
185 186
                );
186 187
                FeatureSet otherFeatures = otherDataSet.getFeatureStore().getFeatureSet(this.expression);
187 188
                for (Feature otherFeature : otherFeatures) {
188
                    if ( otherFeature != null) {
189
                    if (otherFeature != null) {
189 190
                        Geometry otherPolygon = otherFeature.getDefaultGeometry();
190
                        double halfTolerance = this.getTolerance()/2;
191
                        if (otherPolygon!=null && polygon.buffer(-halfTolerance).overlaps(otherPolygon.buffer(-halfTolerance))) {
192
                           I18nManager i18n = ToolsLocator.getI18nManager();
193
                            Geometry error = polygon.intersection(otherPolygon);
194
                            report.addLine(this,
195
                                    thisDataSet,
196
                                    otherDataSet,
197
                                    polygon,
198
                                    error,
199
                                    feature1.getReference(),
200
                                    otherFeature.getReference(),
201
                                    false,
202
                                    i18n.getTranslation("_The_polygon_overlay_with_other")
203
                            );
191
                        if (otherPolygon != null) {
192
                            if (GeometryUtils.overlaps(polygon, otherPolygon, theTolerance)) {
193
                                I18nManager i18n = ToolsLocator.getI18nManager();
194
                                Geometry error = polygon.intersection(otherPolygon);
195
                                report.addLine(this,
196
                                        thisDataSet,
197
                                        otherDataSet,
198
                                        polygon,
199
                                        error,
200
                                        feature1.getReference(),
201
                                        otherFeature.getReference(),
202
                                        false,
203
                                        i18n.getTranslation("_The_polygon_overlay_with_other")
204
                                );
205
                            }
204 206
                        }
205 207
                    }
206 208
                }
......
210 212
        } finally {
211 213
        }
212 214
    }
213
    
215

  
214 216
}
215

  
org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/rule/PolygonMustBeCoveredByPolygonRule.java
111 111
            }
112 112
            Geometry polygon = feature1.getDefaultGeometry();
113 113
            TopologyDataSet theDataSet2 = this.getDataSet2();
114
            double halfTolerance = getTolerance()/2;
114
            double theTolerance = getTolerance();
115 115
            if (theDataSet2.getSpatialIndex() != null) {
116 116
                boolean contained = false;
117 117
                for (FeatureReference featureReference : theDataSet2.query(polygon)) {
118 118
                    Feature feature2 = featureReference.getFeature();
119 119
                    Geometry otherPolygon = feature2.getDefaultGeometry();
120
                    if( otherPolygon!=null && otherPolygon.buffer(halfTolerance).contains(polygon.buffer(-halfTolerance)) ) {
120
                    if( otherPolygon!=null && otherPolygon.buffer(theTolerance).contains(polygon) ) {
121 121
                        contained = true;
122 122
                        break;
123 123
                    }
......
136 136
                    );
137 137
                }
138 138
            } else {
139
                this.expression.setPhrase(
140
                        this.expressionBuilder.ifnull(
141
                                this.expressionBuilder.column(this.geomName),
142
                                this.expressionBuilder.constant(false),
143
                                this.expressionBuilder.ST_Contains(
144
                                        this.expressionBuilder.ST_Buffer(
145
                                                this.expressionBuilder.column(this.geomName),
146
                                                this.expressionBuilder.constant(halfTolerance)
147
                                        ),
148
                                        this.expressionBuilder.geometry(polygon.buffer(-halfTolerance))
149
                                )
150
                        ).toString()
151
                );
139
                if(theTolerance > 0){
140
                    this.expression.setPhrase(
141
                            this.expressionBuilder.ifnull(
142
                                    this.expressionBuilder.column(this.geomName),
143
                                    this.expressionBuilder.constant(false),
144
                                    this.expressionBuilder.ST_Contains(
145
                                            this.expressionBuilder.ST_Buffer(
146
                                                    this.expressionBuilder.column(this.geomName),
147
                                                    this.expressionBuilder.constant(theTolerance)
148
                                            ),
149
                                            this.expressionBuilder.geometry(polygon)
150
                                    )
151
                            ).toString()
152
                    );
153
                } else {
154
                    this.expression.setPhrase(
155
                            this.expressionBuilder.ifnull(
156
                                    this.expressionBuilder.column(this.geomName),
157
                                    this.expressionBuilder.constant(false),
158
                                    this.expressionBuilder.ST_Contains(
159
                                            this.expressionBuilder.column(this.geomName),
160
                                            this.expressionBuilder.geometry(polygon)
161
                                    )
162
                            ).toString()
163
                    );
164
                }
152 165
                if (theDataSet2.findFirst(this.expression) == null) {
153 166
                    I18nManager i18n = ToolsLocator.getI18nManager();
154 167
                    report.addLine(this,
org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/rule/PolygonMustNotOverlapPolygonRule.java
27 27
import org.gvsig.expressionevaluator.ExpressionUtils;
28 28
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
29 29
import org.gvsig.expressionevaluator.GeometryExpressionUtils;
30
import org.gvsig.fmap.dal.exception.DataException;
31
import org.gvsig.fmap.dal.feature.EditableFeature;
32 30
import org.gvsig.fmap.dal.feature.Feature;
33 31
import org.gvsig.fmap.dal.feature.FeatureReference;
34 32
import org.gvsig.fmap.dal.feature.FeatureSet;
35 33
import org.gvsig.fmap.geom.Geometry;
36
import org.gvsig.fmap.geom.operation.GeometryOperationException;
37
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
34
import org.gvsig.fmap.geom.GeometryUtils;
38 35
import org.gvsig.tools.ToolsLocator;
39 36
import org.gvsig.tools.dynobject.DynObject;
40 37
import org.gvsig.tools.i18n.I18nManager;
......
206 203
            if( polygon==null ) {
207 204
                return;
208 205
            }
206
            double theTolerance = this.getTolerance();
209 207
            TopologyDataSet theDataSet = this.getDataSet1();
210 208
            if (theDataSet.getSpatialIndex() != null) {
211 209
                for (FeatureReference otherReference : theDataSet.query(polygon)) {
......
214 212
                    }
215 213
                    Feature otherFeature = otherReference.getFeature();
216 214
                    Geometry otherPolygon = otherFeature.getDefaultGeometry();
217
                    double halfTolerance = this.getTolerance()/2;
218
                    if (otherPolygon!=null && polygon.buffer(-halfTolerance).overlaps(otherPolygon.buffer(-halfTolerance))) {
219
                        I18nManager i18n = ToolsLocator.getI18nManager();
220
                        Geometry error = polygon.intersection(otherPolygon);
221
                        report.addLine(this,
222
                                theDataSet,
223
                                null,
224
                                polygon,
225
                                error,
226
                                feature1.getReference(),
227
                                otherReference,
228
                                false,
229
                                i18n.getTranslation("_The_polygon_overlay_with_other")
230
                        );
215
                    
216
                    if(otherPolygon != null){
217
                        if (GeometryUtils.overlaps(polygon, otherPolygon, theTolerance)) {
218
                            I18nManager i18n = ToolsLocator.getI18nManager();
219
                            Geometry error = polygon.intersection(otherPolygon);
220
                            report.addLine(this,
221
                                    theDataSet,
222
                                    null,
223
                                    polygon,
224
                                    error,
225
                                    feature1.getReference(),
226
                                    otherReference,
227
                                    false,
228
                                    i18n.getTranslation("_The_polygon_overlay_with_other")
229
                            );
230
                        }
231 231
                    }
232 232
                }
233 233
            } else {
......
245 245
                for (Feature feature : features) {
246 246
                    if ( feature != null) {
247 247
                        Geometry otherPolygon = feature.getDefaultGeometry();
248
                        double halfTolerance = this.getTolerance()/2;
249
                        if (otherPolygon!=null && polygon.buffer(-halfTolerance).overlaps(otherPolygon.buffer(-halfTolerance))) {
250
                           I18nManager i18n = ToolsLocator.getI18nManager();
251
                            Geometry error = polygon.intersection(otherPolygon);
252
                            report.addLine(this,
253
                                    theDataSet,
254
                                    null,
255
                                    polygon,
256
                                    error,
257
                                    feature1.getReference(),
258
                                    feature.getReference(),
259
                                    false,
260
                                    i18n.getTranslation("_The_polygon_overlay_with_other")
261
                            );
248
                        if(otherPolygon != null) {
249
                            if (GeometryUtils.overlaps(polygon, otherPolygon, theTolerance)) {
250
                                I18nManager i18n = ToolsLocator.getI18nManager();
251
                                Geometry error = polygon.intersection(otherPolygon);
252
                                report.addLine(this,
253
                                        theDataSet,
254
                                        null,
255
                                        polygon,
256
                                        error,
257
                                        feature1.getReference(),
258
                                        feature.getReference(),
259
                                        false,
260
                                        i18n.getTranslation("_The_polygon_overlay_with_other")
261
                                );
262
                            }
262 263
                        }
263 264
                    }
264 265
                }
......
269 270
        }
270 271
    }
271 272
    
273
//    private boolean overlaps(Geometry polygon, Geometry otherPolygon, double theTolerance) throws GeometryOperationNotSupportedException, GeometryOperationException {
274
//        Geometry polygon1 = polygon.buffer(-theTolerance);
275
//        Geometry otherPolygon1 = otherPolygon.buffer(-theTolerance);
276
//        boolean overlaps = false;
277
//        if (polygon1 != null) {
278
//            overlaps = polygon1.overlaps(otherPolygon);
279
//        } else if (otherPolygon1 != null) {
280
//            overlaps = polygon.overlaps(otherPolygon1);
281
//        }
282
//        return overlaps;
283
//    }
284
    
272 285
}
273 286

  
org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/rule/GeometryMustNotBeNullRule.java
28 28
import org.gvsig.tools.ToolsLocator;
29 29
import org.gvsig.tools.i18n.I18nManager;
30 30
import org.gvsig.tools.task.SimpleTaskStatus;
31
import org.gvsig.topology.lib.spi.AbstractTopologyRule;
32 31
import org.gvsig.topology.lib.api.TopologyPlan;
33 32
import org.gvsig.topology.lib.api.TopologyReport;
34 33
import org.gvsig.topology.lib.api.TopologyRuleFactory;
34
import org.gvsig.topology.lib.spi.AbstractTopologyRule;
35 35

  
36 36
/**
37 37
 *
org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/rule/PolygonContainsPolygonRule.java
73 73
                this.expressionBuilder = GeometryExpressionUtils.createExpressionBuilder();
74 74
                this.geomName = store2.getDefaultFeatureType().getDefaultGeometryAttributeName();
75 75
            }
76
            double theTolerance = getTolerance();
76 77
            Geometry polygon = feature1.getDefaultGeometry();
78
            if(theTolerance > 0){
79
                polygon = polygon.buffer(theTolerance);
80
            }
77 81
            TopologyDataSet theDataSet = this.getDataSet2();
78 82
            if (theDataSet.getSpatialIndex() != null) {
79 83
                boolean contains = false;
......
110 114
                        ).toString()
111 115
                );
112 116
                if (theDataSet.findFirst(this.expression) == null) {
117
                    polygon = feature1.getDefaultGeometry();
113 118
                    I18nManager i18n = ToolsLocator.getI18nManager();
114 119
                    report.addLine(this,
115 120
                            this.getDataSet1(),
org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/rule/PolygonContainsPointRule.java
114 114
                this.expressionBuilder = GeometryExpressionUtils.createExpressionBuilder();
115 115
                this.geomName = store2.getDefaultFeatureType().getDefaultGeometryAttributeName();
116 116
            }
117
            double theTolerance = getTolerance();
117 118
            Geometry polygon = feature1.getDefaultGeometry();
119
            if(theTolerance > 0){
120
                polygon = polygon.buffer(theTolerance);
121
            }
118 122
            TopologyDataSet theDataSet = this.getDataSet2();
119 123
            if (theDataSet.getSpatialIndex() != null) {
120 124
                boolean contains = false;
......
127 131
                    }
128 132
                }
129 133
                if( !contains ) {
134
                    polygon = feature1.getDefaultGeometry();
130 135
                    I18nManager i18n = ToolsLocator.getI18nManager();
131 136
                    report.addLine(this,
132 137
                            this.getDataSet1(),
......
151 156
                        ).toString()
152 157
                );
153 158
                if (theDataSet.findFirst(this.expression) == null) {
159
                    polygon = feature1.getDefaultGeometry();
154 160
                    I18nManager i18n = ToolsLocator.getI18nManager();
155 161
                    report.addLine(this,
156 162
                            this.getDataSet1(),
org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/rule/PolygonContainsOnePointRule.java
118 118
                this.geomName = store2.getDefaultFeatureType().getDefaultGeometryAttributeName();
119 119
            }
120 120
            Geometry polygon = feature1.getDefaultGeometry();
121
            double theTolerance = getTolerance();
122
            if(theTolerance > 0){
123
                polygon = polygon.buffer(theTolerance);
124
            }
125

  
121 126
            TopologyDataSet theDataSet = this.getDataSet2();
122 127
            int contained = 0;
123 128
            if (theDataSet.getSpatialIndex() != null) {

Also available in: Unified diff