PostGIS整合Hibernate4.0+Spring(Maven,Kepler)
这里我主要讲实际操作和环境的搭配,一些基本概念,请查看维基百科和百度百科。
一 PostGIS基本概念:
PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。同时,PostGIS遵循OpenGIS的规范。
二 使用的地方:比如查询方圆5公里以内的商店,比如两个城市间的距离等这些跟空间操作有关的功能。
三postGIS的安装:
这里我以postgres9.3版本为蓝图讲解下基本的安装。
1 如果你是已经安装好postgres9.3数据库,而需要额外加载postGIS,请去postGIS官网下载
2 WINDOW请选择Windows Downloads这个选项,进入下载页面,选择相应版本下载安装。
3 安装完成后,会在你的数据库拓展里面看到postgis,posgis_topology等跟postgis有关的拓展。
4 选择postgis建立拓展。
这样基本的安装就完成了,在插件里面,会发现多了一个PostGIS Shapefile and DBF loader 2.1的插件。
而在数据库表中也会多一张叫spatial_ref_sys的表,这个表中包含基本的坐标系的空间信息。
至此,基本的postGIS已经安装成功了。如果有相关疑问或者失败的情况,请参考官方文档:
http://www.bostongis.com/PrinterFriendly.aspx?content_name=postgis_tut01
里面介绍的很详细。
接下来是自己建立测试数据表,用于测试。我截取一部分从官放快速开发的内容,其他请参阅官方文档。
http://live.osgeo.org/zh/quickstart/postgis_quickstart.html
四 手工建立空间数据表格
空间数据库已经建立,现在可以建立具有空间信息的表格。
首先建立一个常规的表格存储有关城市(cities)的信息。这个表格有两栏,一个是 ID 编号,一个是城市名:
demo=# CREATE TABLE cities ( id int4, name varchar(50));
现在添加一个空间栏用于存储城市的位置。习惯上这个栏目叫做 the_geom 。它记录了数据为什么类型(点、线、面)、有几维(这里是二维)以及空间坐标系统。此处使用 EPSG:4326 坐标系统:
demo=# SELECT AddGeometryColumn ('cities', 'the_geom',4326, 'POINT', 2);
完成后,查询 cities 表单应当显示这个新栏目。同时页面将显示当前表达没有记录(0 rows)。
demo=# SELECT * from cities;
id | name |the_geom
----+------+----------
(0 rows)
为添加记录,需要使用 SQL 命令。对于空间栏,使用 PostGIS 的 ST_GeomFromText 可以将文本转化为坐标与参考系号的记录:
demo=# INSERT INTO cities (id, the_geom, name) VALUES(1,ST_GeomFromText('POINT(-0.1257 51.508)',4326),'London, England');
demo=# INSERT INTO cities (id, the_geom, name) VALUES(2,ST_GeomFromText('POINT(-81.233 42.983)',4326),'London, Ontario');
demo=# INSERT INTO cities (id, the_geom, name) VALUES(3,ST_GeomFromText('POINT(27.91162491 -33.01529)',4326),'East London,SA');
当然,这样的输入方式难以操作。其它方式可以更快的输入数据。就目前来说,表格内已经有了一些城市数据,可以先进行查询等操作。
PS:你也可以在你已经存在的表中添加空间坐标字段,添加语句如下:
SELECT AddGeometryColumn ('cities', 'the_geom', 4326, 'POINT', 2);
第一个参数是你要添加的表名,第二个是表中你要添加的字段名称,第三个是SRID信息,之后是空间数据类型,是POINT还是其他。这些在官方文档都有API,请自行查阅。
至此,数据的安装和测试表的建立都已经完成。开始主要部分,环境的搭建和测试。正好也在熟悉下MAVEN搭建hibernate和Spring.
五 Maven搭建hibernate项目。
首先我单独讲,怎么用maven搭建hibernate项目,不使用spring.循序渐进才能知其然也知其所以然。
这里构建hibernate项目会和普通的hibernate项目有所不同,需要添加很多额外的JAR包用于支持postGIS的操作。
至于怎么用manven建立web项目,其实有很多技术同志已经写的很好,并且很详细。这里我推荐两个我实践过的。大家自己去看。
http://blog.csdn.net/clj198606061111/article/details/20221133
http://blog.csdn.net/yuguiyang1990/article/details/8796726
建立好的基本web项目,pom配置如下:
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.esiee.postGis</groupId> <artifactId>postGis</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>postGis Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.3</version> <scope>provided</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> <build> <finalName>postGis</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <configuration> <warFile>target/postGis.war</warFile> </configuration> </plugin> </plugins> </build>
</project> |
基本目录格式如下:
现在我们开始进行支持postGIS的Hibernate的配置,Hbiernate要能支持postGIS,需要用到以下几个工具的帮助。
JTS,Hibernate-Spatial, postgis-jdbc
我的版本如下:
- hibernate-spatial 4.0
- PostGIS JDBC 1.3.3
- postgresql-9.3-1100-jdbc41
- Hibernate 4.2.13.Final
- JTS 1.8
首先在pom.xml中加入版本控制信息
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hibernate.version>4.2.13.Final</hibernate.version>
<maven.tomcat.port>8088</maven.tomcat.port>
</properties>
这里,我们使用4.2.13版本,因为4.3版本有BUG,不能支持Hibernate-Spatial,具体BUG文档,请参阅:
https://hibernate.atlassian.net/browse/HSEARCH-1386
现在开始配置:
首先基本的hibernate配置文件如下:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibe