?
?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的空間索引關系。