Revision 209 trunk/org.gvsig.gdal/org.gvsig.gdal.prov/org.gvsig.gdal.prov.ogr/src/main/java/org/gvsig/gdal/prov/ogr/OGRDataStoreProvider.java
OGRDataStoreProvider.java | ||
---|---|---|
37 | 37 |
import org.gdal.ogr.Layer; |
38 | 38 |
import org.gdal.ogr.ogr; |
39 | 39 |
import org.gdal.ogr.ogrConstants; |
40 |
|
|
40 | 41 |
import org.gvsig.fmap.dal.DataStore; |
41 | 42 |
import org.gvsig.fmap.dal.DataStoreParameters; |
42 | 43 |
import org.gvsig.fmap.dal.DataTypes; |
... | ... | |
70 | 71 |
import org.gvsig.tools.dynobject.DynObject; |
71 | 72 |
import org.gvsig.tools.evaluator.Evaluator; |
72 | 73 |
import org.gvsig.tools.exception.BaseException; |
74 |
|
|
73 | 75 |
import org.slf4j.Logger; |
74 | 76 |
import org.slf4j.LoggerFactory; |
75 | 77 |
|
76 | 78 |
/** |
77 |
*
|
|
79 |
* |
|
78 | 80 |
* @author <a href="mailto:lmarques@disid.com">Lluis Marques</a> |
79 | 81 |
* |
80 | 82 |
*/ |
... | ... | |
84 | 86 |
private static final Logger LOG = LoggerFactory.getLogger(OGRDataStoreProvider.class); |
85 | 87 |
|
86 | 88 |
/** |
87 |
*
|
|
89 |
* |
|
88 | 90 |
*/ |
89 | 91 |
public static final String METADATA_DEFINITION_NAME = "OGRDataStoreProvider"; |
90 | 92 |
|
91 | 93 |
/** |
92 |
*
|
|
94 |
* |
|
93 | 95 |
*/ |
94 | 96 |
public static final String NAME = "OGRDataStoreProvider"; |
95 | 97 |
|
96 | 98 |
/** |
97 |
*
|
|
99 |
* |
|
98 | 100 |
*/ |
99 | 101 |
public static final String DESCRIPTION = "OGR provider to open vectorial resources"; |
100 | 102 |
|
... | ... | |
218 | 220 |
|
219 | 221 |
@Override |
220 | 222 |
public Object run() throws Exception { |
221 |
double[] extent = getLayer().GetExtent(true); |
|
223 |
Layer layer = getLayer(); |
|
224 |
double[] extent = layer.GetExtent(true); |
|
222 | 225 |
if (extent != null) { |
223 | 226 |
return GeometryLocator.getGeometryManager().createEnvelope(extent[0], |
224 | 227 |
extent[2], extent[1], extent[3], SUBTYPES.GEOM2D); |
... | ... | |
226 | 229 |
Envelope tmpEnvelope = |
227 | 230 |
GeometryLocator.getGeometryManager().createEnvelope(SUBTYPES.GEOM2D); |
228 | 231 |
FeatureType featureType = getStoreServices().getDefaultFeatureType(); |
229 |
int index = 0; |
|
230 |
while (index < getLayer().GetFeatureCount()) { |
|
232 |
layer.ResetReading(); |
|
233 |
Feature feature = layer.GetNextFeature(); |
|
234 |
while (feature!=null) { |
|
231 | 235 |
double[] envelope = new double[4]; |
232 |
Feature feature = getLayer().GetNextFeature(); |
|
233 | 236 |
int geomFieldIndex = |
234 |
getLayer().GetLayerDefn().GetGeomFieldIndex(
|
|
237 |
layer.GetLayerDefn().GetGeomFieldIndex(
|
|
235 | 238 |
featureType.getDefaultGeometryAttributeName()); |
236 | 239 |
Geometry ogrGeometry = feature.GetGeomFieldRef(geomFieldIndex); |
237 | 240 |
ogrGeometry.GetEnvelope(envelope); |
238 | 241 |
tmpEnvelope.add(GeometryLocator.getGeometryManager() |
239 | 242 |
.createEnvelope(envelope[0], envelope[2], envelope[1], envelope[3], |
240 | 243 |
SUBTYPES.GEOM2D)); |
241 |
index++;
|
|
244 |
feature = layer.GetNextFeature();
|
|
242 | 245 |
} |
243 | 246 |
|
244 | 247 |
return tmpEnvelope; |
... | ... | |
489 | 492 |
@Override |
490 | 493 |
public Object run() throws Exception { |
491 | 494 |
|
492 |
return getLayer().GetFeatureCount(); |
|
495 |
return getLayer().GetFeatureCount(0);
|
|
493 | 496 |
} |
494 | 497 |
})).longValue(); |
495 | 498 |
} |
... | ... | |
504 | 507 |
FeatureReferenceProviderServices providerServices, FeatureType featureType) |
505 | 508 |
throws DataException { |
506 | 509 |
|
507 |
Feature ogrFeature = getLayer().GetFeature((int) providerServices.getOID()); |
|
510 |
int oid = (int)providerServices.getOID(); |
|
511 |
// Parece que hay un bug en el proveedor de SQLite para gdal. |
|
512 |
// Cuando se lee la capa, el m?todo GetFID est? indexado empezando por 0, |
|
513 |
// pero cuando se busca una ogrFeature a partir de dicho FID |
|
514 |
// el m?todo GetFeature(fid) est? indexado empezando por 1. |
|
515 |
// Esto es para rodear el problema. |
|
516 |
if(this.dataSource.GetDriver().getName().equalsIgnoreCase("SQLite")){ |
|
517 |
oid++; |
|
518 |
} |
|
519 |
Feature ogrFeature = getLayer().GetFeature(oid); |
|
520 |
int fid = ogrFeature.GetFID(); |
|
508 | 521 |
FeatureProvider featureProvider = |
509 |
new DefaultFeatureProvider(featureType, ogrFeature.GetFID());
|
|
522 |
new DefaultFeatureProvider(featureType, fid);
|
|
510 | 523 |
OGRConverter converter = new OGRConverter(); |
511 | 524 |
featureProvider = converter.convert(featureProvider, featureType, ogrFeature); |
512 | 525 |
return featureProvider; |
Also available in: Unified diff