使用JTS与postgis进行空间数据交互

	JTS Topology Suite(JTS)拓扑套件是开源Java软件库,它提供平面几何的对象模型以及一组基本几何功能。并且JTS符合Open GIS联盟发布的SQL简单功能规范(Simple Features Specification for SQL)。所以JTS不仅可以和postgis的数据进行交互,并且还可以在java层提供空间数据关系的运算。
	
	下面记一下 JTS中 关于对 Geometry 类型操作的TypeHandler类;使用JTS 直接引入jts-core jar就好。其中核心是org.locationtech.jts.geom.Geometry类,可以看到其结构与postgis的数据类型是基本一致的
![Geometry](https://img-blog.csdnimg.cn/1b9ce29ab6d34ced9f740cc5cc7c74aa.png#pic_center)

自定义TypeHandler如下:

public abstract class AbstractJtsGeometryTypeHandler<T extends Geometry> extends BaseTypeHandler<T> {

    public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
        ps.setObject(i, new JtsGeometry(parameter));
    }

    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
        JtsGeometry jtsGeometry = (JtsGeometry) rs.getObject(columnName);
        if (jtsGeometry == null) {
            return null;
        }
        return (T) jtsGeometry.getGeometry();
    }

    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        JtsGeometry jtsGeometry = (JtsGeometry) rs.getObject(columnIndex);
        if (jtsGeometry == null) {
            return null;
        }
        return (T) jtsGeometry.getGeometry();
    }

    public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        JtsGeometry jtsGeometry = (JtsGeometry) cs.getObject(columnIndex);
        if (jtsGeometry == null) {
            return null;
        }
        return (T) jtsGeometry.getGeometry();
    }

}
//下面是具体的各个类型
@MappedTypes(LinearRing.class)
public class JtsLinearRingTypeHandler extends AbstractJtsGeometryTypeHandler<LinearRing> {
}

@MappedTypes(LineString.class)
public class JtsLineStringTypeHandler extends AbstractJtsGeometryTypeHandler<LineString> {
}

@MappedTypes(MultiLineString.class)
public class JtsMultiLineStringTypeHandler extends AbstractJtsGeometryTypeHandler<MultiLineString> {
}

@MappedTypes(MultiPoint.class)
public class JtsMultiPointTypeHandler extends AbstractJtsGeometryTypeHandler<MultiPoint> {
}

@MappedTypes(MultiPolygon.class)
public class JtsMultiPolygonTypeHandler extends AbstractJtsGeometryTypeHandler<MultiPolygon> {
}

@MappedTypes(Point.class)
public class JtsPointTypeHandler extends AbstractJtsGeometryTypeHandler<Point> {
}

@MappedTypes(Polygon.class)
public class JtsPolygonTypeHandler extends AbstractJtsGeometryTypeHandler<Polygon> {
}

总结: 之前使用的是postgis下的Geometry类型,引入JTS后发现之前的TypeHandler不适用,特此记录一下JTS中Geometry数据类型的TypeHandler。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值