在当前的软件开发和数据处理领域,地理信息系统(GIS)的应用变得越来越广泛。而对于GIS数据的读取和处理,GeoTools是一个强大而灵活的Java库,提供了丰富的功能和工具。与此同时,MyBatisPlus作为一种优秀的ORM框架,简化了与数据库的交互过程,提高了开发效率。而PostGIS是一个基于PostgreSQL数据库的空间数据库扩展,提供了许多地理空间函数和数据类型,使得数据库能够有效地存储和处理地理空间数据。在这篇博客中,我们将结合GeoTools、MyBatisPlus和PostGIS,探讨如何实现Shp数据的读取和写入数据库的过程。通过结合这三者的强大功能,我们将能够高效地处理GIS数据,并将其存储到数据库中,为地理信息系统的开发提供了可靠而高效的解决方案。
PostGIS是一个开源的空间数据库扩展,为PostgreSQL数据库提供了地理空间功能。它扩展了PostgreSQL的数据类型,使得数据库能够存储地理空间数据,并提供了一系列的地理空间函数和索引,以支持地理信息系统(GIS)应用的开发和分析。PostGIS允许用户在数据库中存储地理要素(如点、线、面)以及地理空间对象的属性信息,同时还提供了强大的查询和分析功能,如空间关系查询、空间分析、几何运算等。主要特点包括:
通过结合PostGIS与GeoTools和MyBatisPlus,我们能够实现更加灵活、高效的GIS数据处理和管理,为地理信息系统的开发提供了强大的支持和工具。
1.PostGis建立空间表
建立空间表的前提是安装PostGis扩展:
createextensionpostgis;安装扩展成功后,会在数据库下面生成一张spatial_ref_sys表:
建表sql语句:
CREATETABLE"xfc_geo_data"("id"varchar(255)COLLATE"pg_catalog"."default"NOTNULL,"extent""public"."geometry","center""public"."geometry",CONSTRAINT"geo_data_pkey"PRIMARYKEY("id"));COMMENTONCOLUMN"public"."xfc_geo_data"."id"IS'id';COMMENTONCOLUMN"public"."xfc_geo_data"."extent"IS'数据空间范围';COMMENTONCOLUMN"public"."xfc_geo_data"."center"IS'数据中心点';2.基于MybatisPlus的代码生成器创建实体类代码
代码生成器编写:
@Data@EqualsAndHashCode(callSuper=false)@Accessors(chain=true)publicclassXfcGeoDataimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@TableId(value="id",type=IdType.ASSIGN_ID)privateStringid;privateStringextent;privateStringcenter;}4.3.Handler类编写及适配属性字段1.编写PgGeometry84TypeHandler类
这个类主要是用于适配PostGis的geometry的数据类型。
验证空间数据的正确性有很多方法,我用的是的一个JTS的工具:
由上图可知我们解析插入到PostGis数据库中的数据是没问题的,我这里只是提供一个宽泛的验证,详细的验证需要根据地理要素的id对比验证解析图形的正确性。