Revision 108
org.gvsig.dgn/trunk/org.gvsig.dgn/org.gvsig.dgn.provider/src/test/java/org/gvsig/fmap/dal/store/dgn/TestDGN.java | ||
---|---|---|
28 | 28 |
package org.gvsig.fmap.dal.store.dgn; |
29 | 29 |
|
30 | 30 |
import java.io.File; |
31 |
import java.net.URL; |
|
32 |
import org.gvsig.fmap.dal.DALLocator; |
|
33 |
import org.gvsig.fmap.dal.DataManager; |
|
31 | 34 |
|
32 | 35 |
import org.gvsig.fmap.dal.DataStoreParameters; |
33 | 36 |
import org.gvsig.fmap.dal.exception.DataException; |
34 |
import org.gvsig.fmap.dal.feature.BaseTestFeatureStore; |
|
35 | 37 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
38 |
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase; |
|
36 | 39 |
|
37 |
public class TestDGN extends BaseTestFeatureStore {
|
|
40 |
import static junit.framework.Assert.assertNotNull;
|
|
38 | 41 |
|
39 |
public static final File file_prueba = new File(TestDGN.class.getResource( |
|
40 |
"data/prueba.dgn").getFile()); |
|
41 |
|
|
42 |
public class TestDGN extends AbstractLibraryAutoInitTestCase { |
|
43 |
|
|
44 |
private File file_prueba = null; |
|
45 |
private DataManager dataManager = null; |
|
46 |
|
|
47 |
@Override |
|
48 |
protected void doSetUp() throws Exception { |
|
49 |
URL res = TestDGN.class.getResource("data/prueba.dgn"); |
|
50 |
this.file_prueba = new File(res.getFile()); |
|
51 |
this.dataManager = DALLocator.getDataManager(); |
|
52 |
} |
|
53 |
|
|
54 |
|
|
42 | 55 |
/* |
43 | 56 |
* (non-Javadoc) |
44 | 57 |
* |
... | ... | |
48 | 61 |
*/ |
49 | 62 |
public DataStoreParameters getDefaultDataStoreParameters() |
50 | 63 |
throws DataException { |
64 |
|
|
51 | 65 |
DGNStoreParameters dgnParameters = null; |
52 | 66 |
|
53 | 67 |
dgnParameters = (DGNStoreParameters) dataManager |
... | ... | |
74 | 88 |
|
75 | 89 |
|
76 | 90 |
public void testLegendAndLabeling() throws Exception { |
77 |
FeatureStore store = (FeatureStore) dataManager |
|
78 |
.createStore(getDefaultDataStoreParameters()); |
|
91 |
FeatureStore store = (FeatureStore) dataManager.openStore( |
|
92 |
DGNStoreProvider.NAME, |
|
93 |
getDefaultDataStoreParameters() |
|
94 |
); |
|
79 | 95 |
|
80 | 96 |
assertNotNull(store.invokeDynMethod("getLegend", null)); |
81 | 97 |
assertNotNull(store.invokeDynMethod("getLabeling", null)); |
org.gvsig.dgn/trunk/org.gvsig.dgn/org.gvsig.dgn.provider/src/main/resources/org/gvsig/fmap/dal/store/dgn/DGNParameters.xml | ||
---|---|---|
26 | 26 |
<field name="sortByGeometryType" label="Sort by geometry type" type="Boolean" defaultValue="true" mandatory="false"> |
27 | 27 |
<description>If checked sort the rows of table by the geometry type (none,suface,curve,point)</description> |
28 | 28 |
</field> |
29 |
<field name="ignoreZ" label="Ignore Z" type="Boolean" defaultValue="false" mandatory="false">
|
|
30 |
<description>If checked and DGN has Z dimension, set all Zs to 0.</description>
|
|
29 |
<field name="force2d" label="Force 2D" type="Boolean" defaultValue="false" mandatory="false">
|
|
30 |
<description>If checked and DGN has Z dimension create all geometry in 2D and ignore the Zs.</description>
|
|
31 | 31 |
</field> |
32 | 32 |
<field name="Reload" label="Reload" type="Boolean" defaultValue="false" mandatory="false"> |
33 | 33 |
<description>Reload an already loaded DGN as a new layer</description> |
... | ... | |
50 | 50 |
</field> |
51 | 51 |
|
52 | 52 |
<!-- Advanced --> |
53 |
<field name="ignoreZ" label="Ignore Z" type="Boolean" defaultValue="false" mandatory="false"> |
|
54 |
<description>If checked and DGN has Z dimension, set all Zs to 0.</description> |
|
55 |
</field> |
|
53 | 56 |
<field name="useZAsElevation" label="Use Z as elevation" type="Boolean" defaultValue="false" mandatory="false" group="Advanced"> |
54 | 57 |
<description>If set, use the Z value to fill the field elevation.</description> |
55 | 58 |
</field> |
org.gvsig.dgn/trunk/org.gvsig.dgn/org.gvsig.dgn.provider/src/main/java/org/gvsig/fmap/dal/store/dgn/lib/DGNElemCore.java | ||
---|---|---|
19 | 19 |
*/ |
20 | 20 |
package org.gvsig.fmap.dal.store.dgn.lib; |
21 | 21 |
|
22 |
import java.util.Formatter; |
|
23 |
|
|
22 | 24 |
/** |
23 | 25 |
* Clase utilizada para guardar un elemento de tipo Base del cual extienden los |
24 | 26 |
* dem?s tipos. |
... | ... | |
136 | 138 |
public int getSType() { |
137 | 139 |
return this.stype; |
138 | 140 |
} |
141 |
|
|
142 |
|
|
143 |
public byte[] getData() { |
|
144 |
return this.raw_data; |
|
145 |
} |
|
146 |
|
|
147 |
public String getDataAsHexadecimal() { |
|
148 |
if( this.raw_data == null ) { |
|
149 |
return null; |
|
150 |
} |
|
151 |
Formatter out = new Formatter(); |
|
152 |
|
|
153 |
for (int i = 0; i < this.raw_data.length; i++) { |
|
154 |
int ch = this.raw_data[i] & 0xff; |
|
155 |
out.format("%02X", ch); |
|
156 |
} |
|
157 |
return out.toString(); |
|
158 |
} |
|
139 | 159 |
} |
org.gvsig.dgn/trunk/org.gvsig.dgn/org.gvsig.dgn.provider/src/main/java/org/gvsig/fmap/dal/store/dgn/DGNStoreParameters.java | ||
---|---|---|
56 | 56 |
public static final String FIELD_LINK_FILTER_DATA = "LinkFilterData"; |
57 | 57 |
|
58 | 58 |
public static final String FIELD_GROUP_GEOMETRIES_OPERATION = "GroupGeometriesOperation"; |
59 |
public static final String FIELD_FORZE2D = "force2D"; |
|
59 | 60 |
|
60 | 61 |
|
61 | 62 |
private DelegatedDynObject parameters; |
... | ... | |
285 | 286 |
} |
286 | 287 |
return x.booleanValue(); |
287 | 288 |
} |
289 |
|
|
290 |
boolean force2D() { |
|
291 |
Boolean x = (Boolean) this.getDynValue(FIELD_FORZE2D); |
|
292 |
if (x == null) { |
|
293 |
return Boolean.FALSE; |
|
294 |
} |
|
295 |
return x.booleanValue(); |
|
296 |
} |
|
297 |
|
|
288 | 298 |
public boolean sortByGeometryType() { |
289 | 299 |
Boolean x = (Boolean) this.getDynValue(FIELD_SORT_BY_GEOMETRY_TYPE); |
290 | 300 |
if (x == null) { |
org.gvsig.dgn/trunk/org.gvsig.dgn/org.gvsig.dgn.provider/src/main/java/org/gvsig/fmap/dal/store/dgn/DGNStoreProvider.java | ||
---|---|---|
7 | 7 |
import java.io.FileWriter; |
8 | 8 |
import java.io.IOException; |
9 | 9 |
import java.util.ArrayList; |
10 |
import java.util.Collections; |
|
11 |
import java.util.Comparator; |
|
10 |
import java.util.Date; |
|
12 | 11 |
import java.util.HashMap; |
13 | 12 |
import java.util.Iterator; |
14 | 13 |
import java.util.List; |
15 | 14 |
import java.util.Map; |
16 |
import java.util.regex.Pattern; |
|
17 | 15 |
import org.apache.commons.io.IOUtils; |
18 |
import org.apache.commons.lang3.StringUtils; |
|
19 | 16 |
|
20 | 17 |
import org.cresques.cts.IProjection; |
21 | 18 |
import org.gvsig.fmap.dal.DALLocator; |
... | ... | |
59 | 56 |
import org.gvsig.fmap.geom.GeometryManager; |
60 | 57 |
import org.gvsig.fmap.geom.Geometry.SUBTYPES; |
61 | 58 |
import org.gvsig.fmap.geom.Geometry.TYPES; |
62 |
import org.gvsig.fmap.geom.aggregate.Aggregate; |
|
63 |
import org.gvsig.fmap.geom.aggregate.MultiCurve; |
|
64 |
import org.gvsig.fmap.geom.aggregate.MultiLine; |
|
65 |
import org.gvsig.fmap.geom.aggregate.MultiPolygon; |
|
66 |
import org.gvsig.fmap.geom.aggregate.MultiPrimitive; |
|
67 | 59 |
import org.gvsig.fmap.geom.exception.CreateEnvelopeException; |
68 | 60 |
import org.gvsig.fmap.geom.exception.CreateGeometryException; |
69 |
import org.gvsig.fmap.geom.primitive.Curve; |
|
70 | 61 |
import org.gvsig.fmap.geom.primitive.Envelope; |
71 | 62 |
import org.gvsig.fmap.geom.primitive.GeneralPathX; |
72 |
import org.gvsig.fmap.geom.primitive.Line; |
|
73 | 63 |
import org.gvsig.fmap.geom.primitive.OrientablePrimitive; |
74 | 64 |
import org.gvsig.fmap.geom.primitive.Point; |
75 |
import org.gvsig.fmap.geom.primitive.Polygon; |
|
76 |
import org.gvsig.fmap.geom.primitive.Primitive; |
|
77 |
import org.gvsig.fmap.geom.primitive.Surface; |
|
78 |
import org.gvsig.fmap.geom.type.GeometryType; |
|
79 | 65 |
import org.gvsig.tools.dynobject.exception.DynMethodException; |
80 |
import org.gvsig.tools.logger.FilteredLogger; |
|
81 | 66 |
import org.slf4j.Logger; |
82 | 67 |
import org.slf4j.LoggerFactory; |
83 | 68 |
|
... | ... | |
144 | 129 |
public static final String NAME_FIELD_LINK_MS = "LinkMS"; |
145 | 130 |
public static final String NAME_FIELD_LINK_LENGTH = "LinkLength"; |
146 | 131 |
public static final String NAME_FIELD_LINK_DATA = "LinkData"; |
132 |
public static final String NAME_FIELD_DATA = "Data"; |
|
147 | 133 |
|
148 | 134 |
private int ID_FIELD_ID; |
149 | 135 |
private int ID_FIELD_TYPE; |
... | ... | |
174 | 160 |
private int ID_FIELD_LINK_MS; |
175 | 161 |
private int ID_FIELD_LINK_LENGTH; |
176 | 162 |
private int ID_FIELD_LINK_DATA; |
163 |
private int ID_FIELD_DATA; |
|
177 | 164 |
private int ID_FIELD_GEOMETRY; |
178 | 165 |
private int MAX_FIELD_ID; |
179 | 166 |
|
... | ... | |
274 | 261 |
} |
275 | 262 |
} |
276 | 263 |
|
264 |
public static class TimeCounter { |
|
265 |
private static final Logger logger = LoggerFactory.getLogger(TimeCounter.class); |
|
266 |
|
|
267 |
private long counter = 0; |
|
268 |
private Date t1; |
|
269 |
private Date t2; |
|
270 |
|
|
271 |
public void start() { |
|
272 |
this.t1 = new Date(); |
|
273 |
this.t2 = this.t1; |
|
274 |
} |
|
275 |
|
|
276 |
public void restart() { |
|
277 |
this.t1 = new Date(); |
|
278 |
this.t2 = this.t1; |
|
279 |
this.counter = 0; |
|
280 |
} |
|
281 |
|
|
282 |
public void stop() { |
|
283 |
this.t2 = new Date(); |
|
284 |
this.counter += this.t2.getTime()- this.t1.getTime(); |
|
285 |
} |
|
286 |
public long get() { |
|
287 |
return this.counter; |
|
288 |
} |
|
289 |
public void log(String msg) { |
|
290 |
logger.debug("Time "+get()+" ms. " + msg); |
|
291 |
} |
|
292 |
public void restart(String msg) { |
|
293 |
this.stop(); |
|
294 |
this.log(msg); |
|
295 |
this.restart(); |
|
296 |
} |
|
297 |
} |
|
298 |
|
|
277 | 299 |
public void open() throws OpenException { |
278 | 300 |
if (this.data != null) { |
279 | 301 |
return; |
... | ... | |
281 | 303 |
try { |
282 | 304 |
getResource().execute(new ResourceAction() { |
283 | 305 |
public Object run() throws Exception { |
306 |
|
|
307 |
TimeCounter tc = new TimeCounter(); |
|
308 |
tc.start(); |
|
309 |
|
|
284 | 310 |
FeatureStoreProviderServices store = getStoreServices(); |
285 | 311 |
if (dgndata == null |
286 | 312 |
&& !(getDGNParameters().useReload())) { |
... | ... | |
291 | 317 |
resource.setData(new HashMap()); |
292 | 318 |
} |
293 | 319 |
} |
294 |
|
|
320 |
tc.restart("Retrive data from resource (data="+dgndata+")"); |
|
321 |
|
|
295 | 322 |
if (dgndata == null) { |
296 | 323 |
dgndata = new DGNData(); |
297 | 324 |
dgndata.data = new ArrayList(); |
... | ... | |
331 | 358 |
((Map) resource.getData()).put( |
332 | 359 |
projection.getAbrev(), |
333 | 360 |
dgndata); // OJO la reproyeccion |
361 |
tc.restart("Loaded data from file (data="+dgndata+")"); |
|
334 | 362 |
resource.notifyClose(); |
335 | 363 |
} |
336 | 364 |
// El feature type no lo compartimos entre las instancias del |
337 | 365 |
// mismo resource ya que puede cambiar en funcion del filtro. |
338 | 366 |
// Por lo menos el geometry-type. |
339 | 367 |
List<FeatureType> featureTypes = getFeatureTypes(store); |
368 |
|
|
369 |
tc.restart("Created featuretype (featureTypes="+featureTypes+")"); |
|
340 | 370 |
|
341 | 371 |
PostProcessFeatures postProcess = new PostProcessFeatures( |
342 | 372 |
getDGNParameters(), |
... | ... | |
349 | 379 |
data = dgndata.data; |
350 | 380 |
setDynValue("Envelope", dgndata.getEnvelopeCopy()); |
351 | 381 |
} |
382 |
tc.restart("PostProcessFeatures"); |
|
383 |
|
|
352 | 384 |
legendBuilder = dgndata.legendBuilder; |
353 | 385 |
store.setFeatureTypes(featureTypes, featureTypes.get(0)); |
354 | 386 |
setDynValue("CRS", projection); |
355 | 387 |
counterNewsOIDs = data.size(); |
388 |
tc.restart("load finished."); |
|
356 | 389 |
return null; |
357 | 390 |
} |
358 | 391 |
}); |
... | ... | |
508 | 541 |
.setDefaultValue("") |
509 | 542 |
.getIndex(); |
510 | 543 |
|
544 |
ID_FIELD_DATA = featureType.add(NAME_FIELD_DATA, DataTypes.STRING, 512) |
|
545 |
.setDefaultValue("") |
|
546 |
.getIndex(); |
|
547 |
|
|
511 | 548 |
EditableFeatureAttributeDescriptor attr = featureType.add(NAME_FIELD_GEOMETRY, DataTypes.GEOMETRY); |
512 | 549 |
attr.setSRS(this.projection); |
513 | 550 |
int geometryTypeToUse = getDGNParameters().getGeometryTypeFilter(); |
... | ... | |
713 | 750 |
data.set(ID_FIELD_ROTATIONTEXT, 0); |
714 | 751 |
data.set(ID_FIELD_TEXT, null); |
715 | 752 |
data.set(ID_FIELD_SCALE, dgnReader.getInfo().scale); |
753 |
data.set(ID_FIELD_DATA, elemento.getDataAsHexadecimal()); |
|
754 |
|
|
716 | 755 |
if (parentElement == null) { |
717 | 756 |
data.set(ID_FIELD_PARENT, elemento.getID()); |
718 | 757 |
} else { |
... | ... | |
743 | 782 |
data.set(ID_FIELD_LINK_DATA, ""); |
744 | 783 |
} |
745 | 784 |
|
785 |
// if( elemento.getStyle()==3 && elemento.getLevel()==23 ) { |
|
786 |
// logger.info("Un isopaco..."); |
|
787 |
// } |
|
746 | 788 |
zvalue = 0; |
747 | 789 |
try { |
748 | 790 |
switch (elemento.stype) { |
... | ... | |
755 | 797 |
DGNElemMultiPoint dgnmultipoint = (DGNElemMultiPoint) elemento; |
756 | 798 |
if (dgnmultipoint.isPoint()) { |
757 | 799 |
DGNPoint p = dgnmultipoint.getPoint(0); |
758 |
Point point = createPoint3D(p.getX(), p.getY(), ignoreZs ? 0 : p.getZ());
|
|
800 |
Point point = createPoint(p.getX(), p.getY(), ignoreZs ? 0 : p.getZ()); |
|
759 | 801 |
data.setDefaultGeometry(point); |
760 | 802 |
zvalue = p.getZ(); |
761 | 803 |
} else { |
762 | 804 |
OrientablePrimitive geom = null; |
763 | 805 |
if (dgnmultipoint.isPolygon()) { |
764 |
geom = geomManager.createSurface( |
|
765 |
dgnmultipoint.is3D() |
|
766 |
? Geometry.SUBTYPES.GEOM3D |
|
767 |
: Geometry.SUBTYPES.GEOM2D |
|
768 |
); |
|
806 |
geom = geomManager.createSurface(getGeometrySubType(dgnmultipoint)); |
|
769 | 807 |
} else { |
770 |
geom = geomManager.createCurve( |
|
771 |
dgnmultipoint.is3D() |
|
772 |
? Geometry.SUBTYPES.GEOM3D |
|
773 |
: Geometry.SUBTYPES.GEOM2D |
|
774 |
); |
|
808 |
geom = geomManager.createCurve(getGeometrySubType(dgnmultipoint)); |
|
775 | 809 |
} |
776 | 810 |
|
777 | 811 |
// Si es una curva nos saltamos los dos primeros y los dos ultimos vertices. |
... | ... | |
787 | 821 |
for (int i = numVertices - 2; i >= first; i--) { |
788 | 822 |
DGNPoint p = dgnmultipoint.getVertex(i); |
789 | 823 |
zvalue = p.getZ(); |
790 |
geom.addVertex(p.getX(), p.getY(), ignoreZs ? 0 : zvalue);
|
|
824 |
addVertex(geom, p.getX(), p.getY(), ignoreZs ? 0 : zvalue);
|
|
791 | 825 |
} |
792 | 826 |
} else { |
793 | 827 |
for (int i = first; i < numVertices; i++) { |
794 | 828 |
DGNPoint p = dgnmultipoint.getVertex(i); |
795 | 829 |
zvalue = p.getZ(); |
796 |
geom.addVertex(p.getX(), p.getY(), ignoreZs ? 0 : zvalue);
|
|
830 |
addVertex(geom,p.getX(), p.getY(), ignoreZs ? 0 : zvalue);
|
|
797 | 831 |
} |
798 | 832 |
} |
799 | 833 |
data.setDefaultGeometry(geom); |
... | ... | |
840 | 874 |
|
841 | 875 |
Geometry geom = null; |
842 | 876 |
if (dgnarc.isSurface()) { |
843 |
geom = geomManager.createSurface(elShapeArc, |
|
844 |
dgnarc.is3D() |
|
845 |
? Geometry.SUBTYPES.GEOM3D |
|
846 |
: Geometry.SUBTYPES.GEOM2D |
|
847 |
); |
|
877 |
geom = geomManager.createSurface(elShapeArc,getGeometrySubType(dgnarc)); |
|
848 | 878 |
} else { |
849 |
geom = geomManager.createCurve(elShapeArc, |
|
850 |
dgnarc.is3D() |
|
851 |
? Geometry.SUBTYPES.GEOM3D |
|
852 |
: Geometry.SUBTYPES.GEOM2D |
|
853 |
); |
|
879 |
geom = geomManager.createCurve(elShapeArc,getGeometrySubType(dgnarc)); |
|
854 | 880 |
} |
855 | 881 |
data.setDefaultGeometry(geom); |
856 | 882 |
break; |
... | ... | |
858 | 884 |
case DGNFileHeader.DGNST_TEXT: |
859 | 885 |
DGNElemText dgntext = (DGNElemText) elemento; |
860 | 886 |
zvalue = dgntext.getPoint().getZ(); |
861 |
Point point = createPoint3D(
|
|
887 |
Point point = createPoint( |
|
862 | 888 |
dgntext.getPoint().getX(), |
863 | 889 |
dgntext.getPoint().getY(), |
864 | 890 |
ignoreZs ? 0 : zvalue |
... | ... | |
908 | 934 |
|
909 | 935 |
} |
910 | 936 |
|
937 |
private int getGeometrySubType(DGNElemCore element) { |
|
938 |
if( getDGNParameters().force2D() ) { |
|
939 |
return Geometry.SUBTYPES.GEOM2D; |
|
940 |
} |
|
941 |
return element.is3D()? Geometry.SUBTYPES.GEOM3D : Geometry.SUBTYPES.GEOM2D; |
|
942 |
} |
|
943 |
|
|
944 |
private void addVertex(OrientablePrimitive geom, double x, double y, double z) { |
|
945 |
if( geom.getDimension()==2 ) { |
|
946 |
geom.addVertex(x, y); |
|
947 |
} else { |
|
948 |
geom.addVertex(x, y, z); |
|
949 |
} |
|
950 |
} |
|
951 |
|
|
911 | 952 |
private void fillRow(Object[] row, DGNElemCore elemento, DGNElemComplexHeader parentElement, DGNReader dgnReader) { |
912 | 953 |
row[ID_FIELD_HEIGHTTEXT] = new Double(0); |
913 | 954 |
row[ID_FIELD_HEIGHTTEXTRAW] = new Double(0); |
... | ... | |
1159 | 1200 |
&& (psLine.vertices[0].y == psLine.vertices[1].y)) { |
1160 | 1201 |
auxRow[ID_FIELD_ENTITY] = "Point"; |
1161 | 1202 |
addShape( |
1162 |
createPoint3D(psLine.vertices[0].x,
|
|
1203 |
createPoint(psLine.vertices[0].x, |
|
1163 | 1204 |
psLine.vertices[0].y, |
1164 | 1205 |
psLine.vertices[0].z), auxRow, |
1165 | 1206 |
type, dgnReader); |
... | ... | |
1335 | 1376 |
case DGNFileHeader.DGNST_TEXT: |
1336 | 1377 |
|
1337 | 1378 |
DGNElemText psText = (DGNElemText) elemento; |
1338 |
Geometry elShapeTxt = createPoint3D(psText.origin.x,
|
|
1379 |
Geometry elShapeTxt = createPoint(psText.origin.x, |
|
1339 | 1380 |
psText.origin.y, psText.origin.z); |
1340 | 1381 |
|
1341 | 1382 |
fillRow(auxRow, elemento, parentElement, dgnReader); |
... | ... | |
1402 | 1443 |
} |
1403 | 1444 |
|
1404 | 1445 |
} |
1405 |
// |
|
1406 |
// private Curve createCurve(boolean is3D) throws CreateGeometryException { |
|
1407 |
// if (is3D) { |
|
1408 |
// return (Curve) geomManager.create( |
|
1409 |
// Geometry.TYPES.CURVE, |
|
1410 |
// Geometry.SUBTYPES.GEOM3D); |
|
1411 |
// } |
|
1412 |
// return (Curve) geomManager.create( |
|
1413 |
// Geometry.TYPES.CURVE, |
|
1414 |
// Geometry.SUBTYPES.GEOM2D); |
|
1415 |
// |
|
1416 |
// } |
|
1417 | 1446 |
|
1418 |
private Point createPoint3D(double x, double y, double z)
|
|
1447 |
private Point createPoint(double x, double y, double z) |
|
1419 | 1448 |
throws DataException { |
1420 | 1449 |
Point point; |
1450 |
int subtype = SUBTYPES.GEOM3D; |
|
1451 |
if( getDGNParameters().force2D() ) { |
|
1452 |
subtype = SUBTYPES.GEOM2D; |
|
1453 |
} |
|
1421 | 1454 |
try { |
1422 |
// point = (Point) geomManager.create(TYPES.POINT, |
|
1423 |
// SUBTYPES.GEOM3D); |
|
1424 |
point = (Point) geomManager.create(TYPES.POINT, |
|
1425 |
SUBTYPES.GEOM3D); |
|
1455 |
point = (Point) geomManager.create(TYPES.POINT,subtype); |
|
1426 | 1456 |
} catch (CreateGeometryException e) { |
1427 |
throw new org.gvsig.fmap.dal.feature.exception.CreateGeometryException( |
|
1428 |
e); |
|
1457 |
throw new org.gvsig.fmap.dal.feature.exception.CreateGeometryException(e); |
|
1429 | 1458 |
} |
1430 | 1459 |
point.setCoordinates(new double[]{x, y, z}); |
1431 | 1460 |
|
org.gvsig.dgn/trunk/org.gvsig.dgn/org.gvsig.dgn.provider/src/main/java/org/gvsig/fmap/dal/store/dgn/PostProcessFeatures.java | ||
---|---|---|
3 | 3 |
import java.util.ArrayList; |
4 | 4 |
import java.util.Collections; |
5 | 5 |
import java.util.Comparator; |
6 |
import java.util.Date; |
|
7 | 6 |
import java.util.Iterator; |
8 | 7 |
import java.util.List; |
9 | 8 |
import org.gvsig.fmap.dal.feature.FeatureType; |
10 | 9 |
import org.gvsig.fmap.dal.feature.spi.FeatureProvider; |
10 |
import org.gvsig.fmap.dal.store.dgn.DGNStoreProvider.TimeCounter; |
|
11 | 11 |
import org.gvsig.fmap.geom.Geometry; |
12 | 12 |
import org.gvsig.fmap.geom.GeometryLocator; |
13 | 13 |
import org.gvsig.fmap.geom.GeometryManager; |
... | ... | |
52 | 52 |
|
53 | 53 |
public List<FeatureProvider> apply(List<FeatureProvider> rows) throws CreateEnvelopeException { |
54 | 54 |
|
55 |
TimeCounter tc_total = new TimeCounter(); |
|
56 |
TimeCounter tc_accept = new TimeCounter(); |
|
57 |
|
|
55 | 58 |
PostProcessFilterOperation filter = this.getFilter(); |
56 | 59 |
|
57 | 60 |
List<FeatureProvider> result = null; |
... | ... | |
64 | 67 |
GeometryManager geomManager = GeometryLocator.getGeometryManager(); |
65 | 68 |
this.envelope = geomManager.createEnvelope(this.geomSubtype); |
66 | 69 |
|
67 |
Date t1 = new Date(); |
|
68 |
|
|
70 |
tc_total.start(); |
|
69 | 71 |
result = new ArrayList<FeatureProvider>(); |
70 | 72 |
while (rowsIterator.hasNext()) { |
71 | 73 |
FeatureProvider feature = rowsIterator.next(); |
72 | 74 |
rowCount++; |
73 |
if (!filter.accept(feature)) { |
|
75 |
|
|
76 |
tc_accept.start(); |
|
77 |
boolean accept = filter.accept(feature); |
|
78 |
tc_accept.stop(); |
|
79 |
|
|
80 |
if (!accept) { |
|
74 | 81 |
continue; |
75 | 82 |
} |
76 | 83 |
rowFitereds++; |
... | ... | |
80 | 87 |
} |
81 | 88 |
result.add(feature); |
82 | 89 |
} |
90 |
tc_total.stop(); |
|
91 |
tc_accept.log("Accepts time filter"); |
|
92 |
tc_total.log("Total time filer, rows input "+rowCount+", output "+rowFitereds ); |
|
83 | 93 |
|
84 |
Date t2 = new Date(); |
|
85 |
logger.debug("Time to filter data " + (t2.getTime() - t1.getTime())+", total rows "+rowCount+", output rows "+rowFitereds); |
|
86 |
|
|
87 | 94 |
} else { |
88 |
Date t1 = new Date();
|
|
95 |
tc_total.start();
|
|
89 | 96 |
|
90 | 97 |
PostProcessGroupOperation groupOperation = new PostProcessGroupOperation( |
91 | 98 |
this.featureType, |
... | ... | |
95 | 102 |
while (rowsIterator.hasNext()) { |
96 | 103 |
FeatureProvider feature = rowsIterator.next(); |
97 | 104 |
rowCount++; |
98 |
if (!filter.accept(feature)) { |
|
105 |
|
|
106 |
tc_accept.start(); |
|
107 |
boolean accept = filter.accept(feature); |
|
108 |
tc_accept.stop(); |
|
109 |
|
|
110 |
if (!accept) { |
|
99 | 111 |
continue; |
100 | 112 |
} |
101 | 113 |
rowFitereds++; |
... | ... | |
104 | 116 |
result = groupOperation.getRows(); |
105 | 117 |
this.envelope = groupOperation.getEnvelope(); |
106 | 118 |
|
107 |
Date t2 = new Date(); |
|
108 |
logger.debug("Time to filter+group data " + (t2.getTime() - t1.getTime())+", total rows "+rowCount+", output rows "+rowFitereds); |
|
119 |
tc_total.stop(); |
|
120 |
tc_accept.log("Accepts time filter+group"); |
|
121 |
tc_total.log("Total time filer+group, rows input "+rowCount+", output "+rowFitereds ); |
|
109 | 122 |
} |
110 | 123 |
|
111 | 124 |
if (parameters.sortByGeometryType()) { |
... | ... | |
119 | 132 |
} |
120 | 133 |
|
121 | 134 |
private void sortRows(List<FeatureProvider> rows) { |
122 |
Date t1 = new Date();
|
|
135 |
TimeCounter tc = new TimeCounter();
|
|
123 | 136 |
Collections.sort(rows, new Comparator<FeatureProvider>() { |
124 | 137 |
public int compare(FeatureProvider o1, FeatureProvider o2) { |
125 | 138 |
Geometry g1 = o1.getDefaultGeometry(); |
... | ... | |
136 | 149 |
return g2.getType() - g1.getType(); |
137 | 150 |
} |
138 | 151 |
}); |
139 |
Date t2 = new Date();
|
|
140 |
logger.debug("Time to sort data " + (t2.getTime() - t1.getTime())+", rows "+rows.size());
|
|
152 |
tc.stop();
|
|
153 |
tc.log("sort data, rows "+rows.size());
|
|
141 | 154 |
} |
142 | 155 |
|
143 | 156 |
public boolean hasOperations() { |
Also available in: Unified diff