提交 2fd7ca4f 编写于 作者: S serge-rider

#4222 Spatial attribute transformers. Add extra settings

上级 dc5bbc59
......@@ -6,15 +6,16 @@
<!-- Spatial transformer -->
<transformer
class="org.jkiss.dbeaver.data.gis.handlers.GeometryAttributeTransformer"
id="WKTAttributeTransformer"
id="GeometryAttributeTransformer"
name="Geometry"
description="Shows string or binary value as Geometry (spatial data type)"
description="Shows string (WKT) or binary (WKB) value as Geometry (spatial data type)"
applyByDefault="false"
custom="true">
<type kind="STRING"/>
<type kind="BINARY"/>
<propertyGroup label="Properties">
<property id="srid" label="SRID" type="string" description="CRS identifier" defaultValue="4326" required="false" validValues=""/>
<property id="srid" label="SRID" type="string" description="CRS identifier of source value" defaultValue="4326" required="false" validValues=""/>
<property id="invertCoordinates" label="Invert coordinates" type="boolean" description="Invert latitude/longitude coordinates" defaultValue="false" required="false"/>
</propertyGroup>
</transformer>
......
......@@ -34,6 +34,7 @@ import java.sql.SQLException;
*/
public class GISGeometryValueHandler extends JDBCAbstractValueHandler {
private int defaultSRID;
private boolean invertCoordinates;
public GISGeometryValueHandler() {
......@@ -44,6 +45,22 @@ public class GISGeometryValueHandler extends JDBCAbstractValueHandler {
this.invertCoordinates = invertCoordinates;
}
public int getDefaultSRID() {
return defaultSRID;
}
public void setDefaultSRID(int defaultSRID) {
this.defaultSRID = defaultSRID;
}
public boolean isInvertCoordinates() {
return invertCoordinates;
}
public void setInvertCoordinates(boolean invertCoordinates) {
this.invertCoordinates = invertCoordinates;
}
@Override
protected Object fetchColumnValue(DBCSession session, JDBCResultSet resultSet, DBSTypedObject type, int index) throws DBCException, SQLException {
return getValueFromObject(session, type,
......@@ -73,25 +90,30 @@ public class GISGeometryValueHandler extends JDBCAbstractValueHandler {
@NotNull
@Override
public DBGeometry getValueFromObject(DBCSession session, DBSTypedObject type, Object object, boolean copy) throws DBCException {
DBGeometry geometry;
if (object == null) {
return new DBGeometry();
geometry = new DBGeometry();
} else if (object instanceof Geometry) {
return new DBGeometry((Geometry)object);
geometry = new DBGeometry((Geometry)object);
} else if (object instanceof byte[]) {
Geometry geometry = GeometryConverter.getInstance().from((byte[]) object);
Geometry jtsGeometry = GeometryConverter.getInstance().from((byte[]) object);
if (invertCoordinates) {
geometry.apply(GeometryConverter.INVERT_COORDINATE_FILTER);
jtsGeometry.apply(GeometryConverter.INVERT_COORDINATE_FILTER);
}
return new DBGeometry(geometry);
geometry = new DBGeometry(jtsGeometry);
} else if (object instanceof String) {
Geometry geometry = GeometryConverter.getInstance().from((String) object);
Geometry jtsGeometry = GeometryConverter.getInstance().from((String) object);
if (invertCoordinates) {
geometry.apply(GeometryConverter.INVERT_COORDINATE_FILTER);
jtsGeometry.apply(GeometryConverter.INVERT_COORDINATE_FILTER);
}
return new DBGeometry(geometry);
geometry = new DBGeometry(jtsGeometry);
} else {
throw new DBCException("Unsupported geometry value: " + object);
}
if (geometry.getSRID() == 0) {
geometry.setSRID(defaultSRID);
}
return geometry;
}
protected byte[] fetchBytes(JDBCResultSet resultSet, int index) throws SQLException {
......
......@@ -45,6 +45,7 @@ public class GeometryAttributeTransformer implements DBDAttributeTransformer {
private static final Log log = Log.getLog(GeometryAttributeTransformer.class);
private static final String PROP_SRID = "srid";
private static final String PROP_INVERT_COORDINATES = "invertCoordinates";
public static final String GIS_TYPE_NAME = "GIS.Transformed";
......@@ -57,7 +58,8 @@ public class GeometryAttributeTransformer implements DBDAttributeTransformer {
if (srid == 0) {
srid = GisConstants.DEFAULT_SRID;
}
attribute.setTransformHandler(new GISValueHandler(attribute.getValueHandler(), srid));
boolean invertCoordinates = CommonUtils.toBoolean(options.get(PROP_INVERT_COORDINATES ));
attribute.setTransformHandler(new GISValueHandler(attribute.getValueHandler(), srid, invertCoordinates));
}
private class GISValueHandler extends ProxyValueHandler {
......@@ -65,9 +67,11 @@ public class GeometryAttributeTransformer implements DBDAttributeTransformer {
private final int srid;
public GISValueHandler(DBDValueHandler target, int srid) {
public GISValueHandler(DBDValueHandler target, int srid, boolean invertCoordinates) {
super(target);
this.realHandler = new GISGeometryValueHandler();
this.realHandler.setDefaultSRID(srid);
this.realHandler.setInvertCoordinates(invertCoordinates);
this.srid = srid;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册