46 |
46 |
import java.io.ByteArrayOutputStream;
|
47 |
47 |
import java.io.PrintStream;
|
48 |
48 |
import java.io.UnsupportedEncodingException;
|
|
49 |
import java.sql.SQLException;
|
49 |
50 |
import java.sql.Types;
|
50 |
51 |
|
51 |
52 |
import com.hardcode.gdbms.engine.values.NullValue;
|
52 |
53 |
import com.hardcode.gdbms.engine.values.Value;
|
53 |
54 |
import com.hardcode.gdbms.engine.values.ValueWriter;
|
|
55 |
import com.iver.cit.gvsig.exceptions.visitors.ProcessVisitorException;
|
|
56 |
import com.iver.cit.gvsig.fmap.core.FPolygon2D;
|
|
57 |
import com.iver.cit.gvsig.fmap.core.FPolyline2D;
|
54 |
58 |
import com.iver.cit.gvsig.fmap.core.FShape;
|
55 |
59 |
import com.iver.cit.gvsig.fmap.core.FShapeM;
|
56 |
60 |
import com.iver.cit.gvsig.fmap.core.GeneralPathX;
|
... | ... | |
65 |
69 |
import com.iver.cit.gvsig.fmap.drivers.DefaultJDBCDriver;
|
66 |
70 |
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
|
67 |
71 |
import com.iver.cit.gvsig.fmap.drivers.XTypes;
|
|
72 |
import com.vividsolutions.jts.geom.Geometry;
|
68 |
73 |
|
69 |
74 |
/**
|
70 |
75 |
* @author fjp
|
... | ... | |
230 |
235 |
* @param dbLayerDef
|
231 |
236 |
* @param feat
|
232 |
237 |
* @return
|
|
238 |
* @throws SQLException
|
|
239 |
* @throws ProcessVisitorException
|
233 |
240 |
*/
|
234 |
241 |
public String getSqlInsertFeature(DBLayerDefinition dbLayerDef,
|
235 |
|
IFeature feat) {
|
|
242 |
IFeature feat) throws ProcessVisitorException {
|
236 |
243 |
StringBuffer sqlBuf = new StringBuffer("INSERT INTO "
|
237 |
244 |
+ dbLayerDef.getComposedTableName() + " (");
|
238 |
245 |
String sql = null;
|
... | ... | |
277 |
284 |
geometry=ShapeMFactory.createPolyline2DM(new GeneralPathX(geometry.getInternalShape()),((IGeometryM)geometry).getMs()); //MCoord
|
278 |
285 |
}
|
279 |
286 |
}
|
|
287 |
if (!isCorrectGeometry(geometry, type))
|
|
288 |
throw new ProcessVisitorException("incorrect_geometry",new Exception());
|
280 |
289 |
//MCoord
|
281 |
290 |
if ((type == (FShape.LINE|FShape.M)) || (type == (FShape.POINT|FShape.M))){
|
282 |
291 |
sqlBuf.append(" GeometryFromText( '"
|
283 |
292 |
+ ((FShapeM)geometry.getInternalShape()).toText() + "', "
|
284 |
293 |
+ DefaultJDBCDriver.removePrefix(dbLayerDef.getSRID_EPSG()) + ")");
|
285 |
294 |
}else{
|
|
295 |
Geometry jtsGeom=geometry.toJTSGeometry();
|
|
296 |
if (jtsGeom==null || !isCorrectType(jtsGeom, type)){
|
|
297 |
throw new ProcessVisitorException("incorrect_geometry",new Exception());
|
|
298 |
}
|
286 |
299 |
sqlBuf.append(" GeometryFromText( '"
|
287 |
|
+ geometry.toJTSGeometry().toText() + "', "
|
|
300 |
+ jtsGeom.toText() + "', "
|
288 |
301 |
+ DefaultJDBCDriver.removePrefix(dbLayerDef.getSRID_EPSG()) + ")");
|
289 |
302 |
}
|
290 |
303 |
|
... | ... | |
294 |
307 |
return sql;
|
295 |
308 |
}
|
296 |
309 |
|
|
310 |
private boolean isCorrectType(Geometry jtsGeom, int type) {
|
|
311 |
if (FShape.POLYGON==type){
|
|
312 |
if (!jtsGeom.getGeometryType().equals("MultiPolygon") && !jtsGeom.getGeometryType().equals("Polygon") )
|
|
313 |
return false;
|
|
314 |
}
|
|
315 |
return true;
|
|
316 |
}
|
|
317 |
|
|
318 |
private boolean isCorrectGeometry(IGeometry geometry, int type) {
|
|
319 |
if (FShape.POLYGON==type){
|
|
320 |
FPolygon2D polygon = (FPolygon2D)geometry.getInternalShape();
|
|
321 |
if (!(polygon.getBounds2D().getWidth()>0 && polygon.getBounds2D().getHeight()>0))
|
|
322 |
return false;
|
|
323 |
}else if (FShape.LINE==type){
|
|
324 |
FPolyline2D line = (FPolyline2D)geometry.getInternalShape();
|
|
325 |
if (!(line.getBounds2D().getWidth()>0 || line.getBounds2D().getHeight()>0))
|
|
326 |
return false;
|
|
327 |
}
|
|
328 |
|
|
329 |
return true;
|
|
330 |
}
|
|
331 |
|
297 |
332 |
public String getSqlCreateIndex(DBLayerDefinition lyrDef) {
|
298 |
333 |
String indexName = lyrDef.getTableName() + "_"
|
299 |
334 |
+ lyrDef.getFieldGeometry() + "_gist";
|