Revision 21843
branches/Mobile_Compatible_Hito_1/libFMap/src-file/org/gvsig/data/datastores/vectorial/file/shp_mem/simplify/DbfMemoryDataSource.java | ||
---|---|---|
3 | 3 |
import java.io.File; |
4 | 4 |
import java.io.IOException; |
5 | 5 |
import java.sql.Types; |
6 |
import java.text.DateFormat; |
|
7 |
import java.text.ParseException; |
|
8 |
import java.text.SimpleDateFormat; |
|
9 |
import java.util.Date; |
|
6 | 10 |
|
7 | 11 |
import org.apache.log4j.Logger; |
12 |
import org.gvsig.data.datastores.vectorial.file.shp_mem.DbaseFileNIO; |
|
8 | 13 |
import org.gvsig.data.datastores.vectorial.file.shp_util.DBFDataSource; |
14 |
import org.gvsig.data.datastores.vectorial.file.shp_util.DbfUtil; |
|
9 | 15 |
import org.gvsig.exceptions.DriverException; |
10 | 16 |
|
11 |
import com.hardcode.gdbms.engine.values.Value; |
|
12 |
import com.hardcode.gdbms.engine.values.ValueCollection; |
|
13 |
import com.hardcode.gdbms.engine.values.ValueFactory; |
|
14 |
|
|
15 |
import es.prodevelop.gvsig.mobile.fmap.driver.vect.dbf.DbaseFileNIO; |
|
16 |
|
|
17 | 17 |
/** |
18 | 18 |
* This class implements a DataSource which is based on a DBF file fully loaded |
19 | 19 |
* into memory. |
... | ... | |
105 | 105 |
return resp; |
106 | 106 |
} |
107 | 107 |
|
108 |
/** |
|
109 |
* Gets the primary key value for a row |
|
110 |
* |
|
111 |
* @param arg0 |
|
112 |
* the row of interest |
|
113 |
* @return a collection representing the primary key |
|
114 |
*/ |
|
115 |
public ValueCollection getPKValue(long arg0) { |
|
116 |
logger |
|
117 |
.warn("Method getPKValue(" + arg0 |
|
118 |
+ ") was called, returned NULL"); |
|
119 |
return null; |
|
120 |
} |
|
108 |
// /**
|
|
109 |
// * Gets the primary key value for a row
|
|
110 |
// *
|
|
111 |
// * @param arg0
|
|
112 |
// * the row of interest
|
|
113 |
// * @return a collection representing the primary key
|
|
114 |
// */
|
|
115 |
// public ValueCollection getPKValue(long arg0) {
|
|
116 |
// logger
|
|
117 |
// .warn("Method getPKValue(" + arg0
|
|
118 |
// + ") was called, returned NULL");
|
|
119 |
// return null;
|
|
120 |
// }
|
|
121 | 121 |
|
122 | 122 |
/** |
123 | 123 |
* @return the cumber of fields that compose the PK. |
... | ... | |
126 | 126 |
return dbFileAccess.getFieldCount(); |
127 | 127 |
} |
128 | 128 |
|
129 |
private Value getValueOfItsType(int fieldindex, int row) {
|
|
129 |
private Object getValueOfItsType(int fieldindex, int row) {
|
|
130 | 130 |
|
131 |
Value resp = ValueFactory.createNullValue();
|
|
131 |
Object resp = null;
|
|
132 | 132 |
|
133 | 133 |
int type = dbFileAccess.getFieldIntType(fieldindex); |
134 | 134 |
switch (type) { |
135 | 135 |
|
136 | 136 |
case Types.DOUBLE: |
137 | 137 |
if (getFieldDecimalPrecision(fieldindex) > 0) { |
138 |
resp = ValueFactory.createValue(dbFileAccess
|
|
139 |
.getNumberFieldValue(row, fieldindex).doubleValue());
|
|
138 |
resp = |
|
139 |
new Double(dbFileAccess.getNumberFieldValue(row, fieldindex).doubleValue());
|
|
140 | 140 |
} else { |
141 |
resp = ValueFactory.createValue(dbFileAccess
|
|
142 |
.getNumberFieldValue(row, fieldindex).intValue());
|
|
141 |
resp = |
|
142 |
new Integer(dbFileAccess.getNumberFieldValue(row, fieldindex).intValue());
|
|
143 | 143 |
} |
144 | 144 |
break; |
145 | 145 |
case Types.VARCHAR: |
146 |
resp = ValueFactory.createValue(dbFileAccess.getStringFieldValue( |
|
147 |
row, fieldindex)); |
|
146 |
resp = dbFileAccess.getStringFieldValue(row, fieldindex); |
|
148 | 147 |
break; |
149 | 148 |
case Types.DATE: |
150 |
resp = ValueFactory.createValue(dbFileAccess.getStringFieldValue(
|
|
151 |
row, fieldindex));
|
|
149 |
String aux = dbFileAccess.getStringFieldValue(row, fieldindex);
|
|
150 |
resp = DbfUtil.stringToDate(aux);
|
|
152 | 151 |
break; |
153 | 152 |
case Types.BOOLEAN: |
154 |
resp = ValueFactory.createValue(dbFileAccess.getBooleanFieldValue( |
|
155 |
row, fieldindex)); |
|
153 |
resp = new Boolean(dbFileAccess.getBooleanFieldValue(row, fieldindex)); |
|
156 | 154 |
break; |
157 | 155 |
} |
158 | 156 |
return resp; |
159 | 157 |
} |
160 | 158 |
|
161 |
/** |
|
162 |
* Gets a row of this data source. |
|
163 |
* |
|
164 |
* @param rowind |
|
165 |
* the index of the row of interest |
|
166 |
* @return the row as an array of values |
|
167 |
*/ |
|
168 |
public Value[] getRow(long rowind) { |
|
159 |
// /** |
|
160 |
// * Gets a row of this data source. |
|
161 |
// * |
|
162 |
// * @param rowind |
|
163 |
// * the index of the row of interest |
|
164 |
// * @return the row as an array of values |
|
165 |
// */ |
|
166 |
// public Value[] getRow(long rowind) { |
|
167 |
// |
|
168 |
// int size = dbFileAccess.getFieldCount(); |
|
169 |
// Value[] resp = new Value[size]; |
|
170 |
// for (int i = 0; i < size; i++) { |
|
171 |
// resp[i] = getValueOfItsType(i, (int) rowind); |
|
172 |
// } |
|
173 |
// return resp; |
|
174 |
// } |
|
169 | 175 |
|
170 |
int size = dbFileAccess.getFieldCount(); |
|
171 |
Value[] resp = new Value[size]; |
|
172 |
for (int i = 0; i < size; i++) { |
|
173 |
resp[i] = getValueOfItsType(i, (int) rowind); |
|
174 |
} |
|
175 |
return resp; |
|
176 |
} |
|
177 |
|
|
178 | 176 |
/** |
179 | 177 |
* @return an array with all the field names |
180 | 178 |
*/ |
... | ... | |
224 | 222 |
* |
225 | 223 |
* @return the value of the given row and field |
226 | 224 |
*/ |
227 |
public Value getFieldValue(long arg0, int arg1) {
|
|
225 |
public Object getFieldValue(long arg0, int arg1) {
|
|
228 | 226 |
return getValueOfItsType(arg1, (int) arg0); |
229 | 227 |
} |
230 | 228 |
|
branches/Mobile_Compatible_Hito_1/libFMap/src-file/org/gvsig/data/datastores/vectorial/file/shp_mem/simplify/MemoryShpDriver.java | ||
---|---|---|
104 | 104 |
import java.util.ArrayList; |
105 | 105 |
|
106 | 106 |
import org.apache.log4j.Logger; |
107 |
import org.gvsig.data.datastores.vectorial.file.FalseByteBuffer; |
|
108 |
import org.gvsig.data.datastores.vectorial.file.Utils; |
|
107 | 109 |
import org.gvsig.data.datastores.vectorial.file.shp_util.SHP; |
110 |
import org.gvsig.fmap.geom.Geometry; |
|
111 |
import org.gvsig.fmap.geom.GeometryFactory; |
|
112 |
import org.gvsig.fmap.geom.GeometryManager; |
|
113 |
import org.gvsig.fmap.geom.primitive.FShape; |
|
114 |
import org.gvsig.fmap.geom.primitive.GeneralPathX; |
|
115 |
import org.gvsig.fmap.geom.primitive.NullGeometry; |
|
108 | 116 |
|
109 |
import es.prodevelop.gvsig.mobile.fmap.core.FNullGeometry; |
|
110 |
import es.prodevelop.gvsig.mobile.fmap.core.FShape; |
|
111 |
import es.prodevelop.gvsig.mobile.fmap.core.GeneralPathX; |
|
112 |
import es.prodevelop.gvsig.mobile.fmap.core.IGeometry; |
|
113 |
import es.prodevelop.gvsig.mobile.fmap.core.ShapeFactory; |
|
114 |
import es.prodevelop.gvsig.mobile.fmap.driver.vect.shp.ShapeFileHeader; |
|
115 |
import es.prodevelop.gvsig.mobile.fmap.util.Utils; |
|
116 |
import es.prodevelop.gvsig.mobile.fmap.util.bytebuffer.FalseByteBuffer; |
|
117 |
|
|
118 | 117 |
/** |
119 | 118 |
* SHP driver for a file that is completely loaded into memory. |
120 | 119 |
* |
... | ... | |
316 | 315 |
* |
317 | 316 |
* @throws IOException |
318 | 317 |
*/ |
319 |
public IGeometry getShape(int index) throws IOException {
|
|
318 |
public Geometry getShape(int index) throws IOException { |
|
320 | 319 |
|
321 | 320 |
Point2D.Double p = new Point2D.Double(); |
322 | 321 |
int numParts; |
... | ... | |
324 | 323 |
int i; |
325 | 324 |
int j; |
326 | 325 |
int shapeType; |
326 |
|
|
327 |
GeometryFactory gFactory = GeometryManager.getInstance().getGeometryFactory(); |
|
327 | 328 |
|
328 | 329 |
// Rectangle2D.Double BoundingBox; |
329 | 330 |
// if (m_posShapes[index] == 0) |
... | ... | |
338 | 339 |
if (shapeType == SHP.SHPT_NULL) { |
339 | 340 |
logger.warn("Found a null geometry in file " + fileShp.getName() |
340 | 341 |
+ " (shape index: " + index); |
341 |
return new FNullGeometry();
|
|
342 |
return new NullGeometry(); |
|
342 | 343 |
} |
343 | 344 |
|
344 | 345 |
// retrieve that shape. |
... | ... | |
348 | 349 |
case SHP.SHPT_POINT: |
349 | 350 |
p = readPoint(bb); |
350 | 351 |
|
351 |
return ShapeFactory.createPoint2D(p.getX(), p.getY());
|
|
352 |
return gFactory.createPoint2D(p.getX(), p.getY());
|
|
352 | 353 |
|
353 | 354 |
case SHP.SHPT_ARC: |
354 | 355 |
|
... | ... | |
388 | 389 |
} |
389 | 390 |
} |
390 | 391 |
|
391 |
return ShapeFactory.createPolyline2D(elShape);
|
|
392 |
return gFactory.createPolyline2D(elShape);
|
|
392 | 393 |
|
393 | 394 |
case SHP.SHPT_POLYGON: |
394 | 395 |
|
... | ... | |
428 | 429 |
} |
429 | 430 |
} |
430 | 431 |
|
431 |
return ShapeFactory.createPolygon2D(elShape);
|
|
432 |
return gFactory.createPolygon2D(elShape);
|
|
432 | 433 |
|
433 | 434 |
case SHP.SHPT_POINTZ: |
434 | 435 |
case SHP.SHPT_POINTM: |
... | ... | |
437 | 438 |
double y = bb.getDouble(); |
438 | 439 |
double z = bb.getDouble(); |
439 | 440 |
|
440 |
return ShapeFactory.createPoint3D(x, y, z);
|
|
441 |
return gFactory.createPoint3D(x, y, z);
|
|
441 | 442 |
|
442 | 443 |
case SHP.SHPT_ARCZ: |
443 | 444 |
case SHP.SHPT_ARCM: |
... | ... | |
477 | 478 |
pZ[i] = bb.getDouble(); |
478 | 479 |
} |
479 | 480 |
|
480 |
return ShapeFactory.createPolyline3D(elShape, pZ);
|
|
481 |
return gFactory.createPolyline3D(elShape, pZ);
|
|
481 | 482 |
|
482 | 483 |
case SHP.SHPT_POLYGONZ: |
483 | 484 |
case SHP.SHPT_POLYGONM: |
... | ... | |
518 | 519 |
poZ[i] = bb.getDouble(); |
519 | 520 |
} |
520 | 521 |
|
521 |
return ShapeFactory.createPolygon3D(elShape, poZ);
|
|
522 |
return gFactory.createPolygon3D(elShape, poZ);
|
|
522 | 523 |
|
523 | 524 |
case SHP.SHPT_MULTIPOINT: |
524 | 525 |
bb.position(bb.getPosition() + 32); |
... | ... | |
532 | 533 |
tempY[i] = bb.getDouble(); |
533 | 534 |
} |
534 | 535 |
|
535 |
return ShapeFactory.createMultipoint2D(tempX, tempY);
|
|
536 |
return gFactory.createMultipoint2D(tempX, tempY);
|
|
536 | 537 |
|
537 | 538 |
case SHP.SHPT_MULTIPOINTZ: |
538 | 539 |
case SHP.SHPT_MULTIPOINTM: |
... | ... | |
552 | 553 |
for (i = 0; i < numPoints; i++) { |
553 | 554 |
temZ[i] = bb.getDouble(); |
554 | 555 |
} |
555 |
return ShapeFactory.createMultipoint3D(temX, temY, temZ);
|
|
556 |
return gFactory.createMultipoint3D(temX, temY, temZ);
|
|
556 | 557 |
} |
557 | 558 |
|
558 | 559 |
return null; |
... | ... | |
938 | 939 |
ArrayList _resp = new ArrayList(); |
939 | 940 |
for (int i = 0; i < numReg; i++) { |
940 | 941 |
if (Utils.rectanglesItersect(getShapeBounds(i), rect)) { |
941 |
IGeometry ig = getShape(i);
|
|
942 |
if (ig.getGeometryType() == FShape.POINT || ig.intersects(rect)) {
|
|
942 |
Geometry ig = getShape(i); |
|
943 |
if (ig.getType() == FShape.POINT || ig.intersects(rect)) { |
|
943 | 944 |
_resp.add(new Integer(i)); |
944 | 945 |
// logger.debug("Ha intersectado uno!"); |
945 | 946 |
if (_resp.size() == max) { |
branches/Mobile_Compatible_Hito_1/libFMap/src-file/org/gvsig/data/datastores/vectorial/file/shp_mem/simplify/ShapeFileHeader.java | ||
---|---|---|
4 | 4 |
import java.nio.ByteOrder; |
5 | 5 |
|
6 | 6 |
import org.apache.log4j.Logger; |
7 |
import org.gvsig.data.datastores.vectorial.file.FalseByteBuffer; |
|
7 | 8 |
import org.gvsig.datasources.common.IByteBuffer; |
8 | 9 |
|
9 |
import es.prodevelop.gvsig.mobile.fmap.core.FPolyline2D; |
|
10 |
import es.prodevelop.gvsig.mobile.fmap.util.bytebuffer.FalseByteBuffer; |
|
11 |
|
|
12 | 10 |
/** |
13 | 11 |
* Class to represent the header in the shape file. |
14 | 12 |
*/ |
... | ... | |
49 | 47 |
|
50 | 48 |
public static final int SHAPE_MULTIPATCH = 31; |
51 | 49 |
|
52 |
private static Logger logger = Logger.getLogger(FPolyline2D.class);
|
|
50 |
private static Logger logger = Logger.getLogger(ShapeFileHeader.class);
|
|
53 | 51 |
|
54 | 52 |
/** File Code, must be the value 9994 */ |
55 | 53 |
public int myFileCode = 9994; |
Also available in: Unified diff