![](/img/trans.png)
[英]How to convert an oracle SDO_GEOMETRY object to geoJson using Gson?
[英]How to retrieve SDO_GEOMETRY from database using JDBC?
我是 Java 新手。我需要从数据库中检索 SDO_GEOMETRY 并使用 jdbc 将其转换为字符串。如果有人有示例或想法,请与我分享。
帮助将不胜感激。
最好的祝福,
桑杰。
看看JGeometry类。 有一个调用空间类型的例子:
/// reading a geometry from database
ResultSet rs = statement.executeQuery("SELECT geometry FROM states where name='Florida'");
STRUCT st = (oracle.sql.STRUCT) rs.getObject(1);
//convert STRUCT into geometry
JGeometry j_geom = JGeometry.load(st);
// ... manipulate the geometry or create a new JGeometry ...
/// writing a geometry back to database
PreparedStatement ps = connection.prepareStatement("UPDATE states set geometry=? where name='Florida'");
//convert JGeometry instance to DB STRUCT
STRUCT obj = JGeometry.store(j_geom, connection);
ps.setObject(1, obj);
ps.execute();
如果 Oracle Spatial API 对您不可用,例如因为您使用 OpenJDK(参见Oracle FAQs ),还有一种更基本的方法可以从 ResultSet r
访问 SDO_GEOMETRY 对象:
import java.sql.Struct;
import java.sql.Array;
//...
// access SDO_GEOMETRY of row 1
Object[] geometryArray = ((Struct) r.getObject(1)).getAttributes();
// read its components
int gtype = ((Integer) geometryArray[0]).intValue();
int srid = ((Integer) geometryArray[1]).intValue();
Double[] pointArray = ((Double[]) ((Array) geometryArray[2]).getArray());
Integer[] elemInfoArray = ((Integer[]) ((Array) geometryArray[3]).getArray());
Double[] ordinateArray = ((Double[]) ((Array) geometryArray[4]).getArray());
您还可以通过一个简单的循环来解开数字类型,例如,
double[] ordinates = new double[ordinateArray.length];
for (int i = 0; i < ordinates.length; i++)
ordinates[i] = ordinateArray[i].doubleValue();
或使用等效的更方便的方法(参见StackOverflow: How do I convert Double[] to double[]? )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.