1
package
com.geotools.test;
2
3
/** */
/**
4
*
5
* CopyRight (C) All rights reserved.
6
* <p> * WuHan Inpoint Information Technology Development,Inc.
7
* <p> * Author sinoly <p> Project Name: PostGeo
8
* <p>
9
* Base on : JDK1.5
10
* <p>
11
*
12
*/
13
import
java.io.IOException;
14
import
java.util.HashMap;
15
import
java.util.Map;
16
17
import
org.geotools.data.DataStore;
18
import
org.geotools.data.DataStoreFinder;
19
import
org.geotools.data.FeatureSource;
20
21
public
class
GetPostgisData
{
22
23
static
DataStore pgDatastore;
//
数据容器
24
25
@SuppressWarnings(
"
unchecked
"
)
26
private
static
void
ConnPostGis(String dbtype,String URL,
int
port,String database,String user,String password)
{
27
Map params
=
new
HashMap();
28
params.put(
"
dbtype
"
,
"
postgis
"
);
29
params.put(
"
host
"
, URL);
30
params.put(
"
port
"
,
new
Integer(port));
31
params.put(
"
database
"
, database);
32
params.put(
"
user
"
, user);
33
params.put(
"
passwd
"
, password);
34
try
{
35
pgDatastore
=
DataStoreFinder.getDataStore(params);
36
if
(pgDatastore
!=
null
)
{
37
System.out.println(
"
系统连接到位于:
"
+
URL
+
"
的空间数据库
"
+
database
+
"
成功!
"
);
38
39
}
else
{
40
System.out.println(
"
系统连接到位于:
"
+
URL
+
"
的空间数据库
"
+
database
+
"
失败!请检查相关参数
"
);
41
}
42
}
catch
(IOException e)
{
43
e.printStackTrace();
44
System.out.println(
"
系统连接到位于:
"
+
URL
+
"
的空间数据库
"
+
database
+
"
失败!请检查相关参数
"
);
45
}
46
}
47
48
public
static
void
main(String[] args)
throws
IOException
{
49
ConnPostGis(
""
,
"
localhost
"
,
5432
,
"
navigation
"
,
"
root
"
,
"
123
"
);
50
/**/
/*
读取指定类型名的地理特征
*/
51
FeatureSource fsBC
=
pgDatastore.getFeatureSource(
"
roads
"
);
52
System.out.println(fsBC.getFeatures().size());
53
/**/
/*
得到空间数据库中所有特征表的表名
*/
54
String[] typeName
=
pgDatastore.getTypeNames();
55
for
(
int
i
=
0
;i
<
typeName.length;i
++
)
{
56
System.out.println(typeName[i]);
57
}
58
}
59
}
60
61
进行Geotools的开发工作,肯定会参考GeoTools的官方参考文档。不过我想很多人估计都遇到了和我一样的问题,就是官方参考指南中几乎没有可以编译通过的代码,也就无法谈及用这些代码进行学习了。昨天抽空将Geotools指南中连接到POSTGIS的代码进行了重新编译,才发现指南中的代码是在geotools 2.1.4中编译的。。。狂汗ing。。我居然一直认为是我的人品问题,才导致这些代码在我机器上就无法编译成功滴。。看来说明了一个问题:.。。。
同时在编译过程中还翻阅了2.3的API,也在其中发现了几个对原有方法进行功能修改或者干脆废弃的方法,在此列出:
1、如果你和我一样使用了POSTGRESQL 8.4,sorry,麻烦你不要用其自带的任何JDBC驱动,直接使用geotools中带的数据库驱动吧。不要问我为什么,我也不知道,我唯一知道的就是只有这样程序才能真正的连接到postgis。
2、gt2-main.jar;gt2-postgis.jar;JTS-1.4.jar;geoapi-1.1.0alpha.jar;vecmath-1.2.1.jar。你需要确定这几个文件存在与你的项目构建之中。
3、原有取得指定图层Feature总数的方法是FeatureSource.getCount(Query.ALL)),这个方法已经不能使用了,可以更换成getFeatures().size()方法来取得Feature的总数。(ps:虽说取得总数的方法用的不多,不过我觉得用这个方法来测试是否能连接到postgis还是很方便的。)
4、应用中最好能自己重写postgis的连接池(可不是上面例子中的这种简单玩意,嘿嘿),一般关系数据库额连接池有很多中解决方式,但postgis的数据库连接池目前我还不知道有什么好的解决方式,之所以要自己写连接池的目的就是为了更好的控制postgis的空间索引关系。