使用GeoTools 2.3M连接到POSTGIS数据库

使用GeoTools 2.3M连接到POSTGIS数据库

 

 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。。我居然一直认为是我的人品问题,才导致这些代码在我机器上就无法编译成功滴。。看来说明了一个问题:4475_200361112122146460.gif.。。。
      同时在编译过程中还翻阅了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的空间索引关系。



你可能感兴趣的:(使用GeoTools 2.3M连接到POSTGIS数据库)