sinoly

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  29 随笔 :: 76 文章 :: 189 评论 :: 0 Trackbacks

     刚刚开始学习GeoTools得时候就是感觉关于这方面的资料真是少的可怜,无奈之中翻E文资料,苦学E文。。。唉。。。但是如果说一个知名的开源项目文档中错误百出,我真的很是无奈。。。
     这段时间公司的工作也是很忙,所以只能抽空晚上慢慢研究GeoTools了。。。
     将今天的测试用的GeoTools读取PostGis内容的代码发布出来,希望能对和我一样想去学习GeoTools的同仁起到帮助作用,也希望各位WEBGIS大拿多给我一些意见。。。毕竟以前不是搞GIS,现在很是吃力。。。

package  com.geotools.test;
/**
 * 
 * CopyRight (C) All rights reserved.
 * <p>
 * 
 * WuHan Inpoint Information Technology Development,Inc.
 * <p>
 * 
 * Author sinoly
 * <p>
 * Project Name: PostGeo
 * 
 * 
@version  1.0 2006-11-13
 * 
 * <p>
 * Base on : JDK1.5
 * <p>
 * 
 
*/

import  java.io.IOException;
import  java.util.HashMap;
import  java.util.Map;
import  java.util.NoSuchElementException;

import  org.geotools.data.DataStore;
import  org.geotools.data.DataStoreFinder;
import  org.geotools.data.FeatureReader;
import  org.geotools.data.FeatureResults;
import  org.geotools.data.FeatureSource;
import  org.geotools.feature.AttributeType;
import  org.geotools.feature.Feature;
import  org.geotools.feature.FeatureType;
import  org.geotools.feature.IllegalAttributeException;
import  org.geotools.geometry.Geometry;

public   class  GetPostgisData  {
 
 
static  DataStore pgDatastore;
 
static  FeatureSource fsBC;
 @SuppressWarnings(
" unchecked " )
 
private   static   void  ConnPostGis(String dbtype,String URL, int  port,String database,
   String user,String password)
{
  Map params 
=   new  HashMap();
  params.put(
" dbtype " " postgis " );
  params.put(
" host " , URL);
  params.put(
" port " new  Integer(port));
  params.put(
" database " , database);
  params.put(
" user " , user);
  params.put(
" passwd " , password);  
  
try   {
   pgDatastore 
=  DataStoreFinder.getDataStore(params);
   
if (pgDatastore != null ) {
    System.out.println(
" 系统连接到位于: " + URL + " 的空间数据库 " + database + " 成功! " );
   }
else {
    System.out.println(
" 系统连接到位于: " + URL + " 的空间数据库 " + database + " 失败!请检查相关参数 " );
   }

  }
  catch  (IOException e)  {
   e.printStackTrace();
   System.out.println(
" 系统连接到位于: " + URL + " 的空间数据库 " + database + " 失败!请检查相关参数 " );
  }

 }


 
// 从数据容器中读取所有的特征属性 
 @SuppressWarnings( " deprecation "
 
public   static   void  PostGisReading() {
  
try   {
   FeatureResults fsRU 
=  fsBC.getFeatures();
   FeatureReader reader 
=  fsRU.reader();
   
while  (reader.hasNext())  {
       Feature feature;
    
try   {
     feature 
=  reader.next();
        System.out.print(feature.getID() 
+   " \t " );
        
for  ( int  i  =   0 ; i  <  feature.getNumberOfAttributes(); i ++ {
            Object attribute 
=  feature.getAttribute( i );
            
if  ( ! (attribute  instanceof  Geometry))
                System.out.print(attribute 
+   " \t " );
        }

        System.out.println();
    }
  catch  (NoSuchElementException e)  {
     e.printStackTrace();
    }
  catch  (IllegalAttributeException e)  {
     e.printStackTrace();
    }

   }

   reader.close();
  }
  catch  (IOException e1)  {
   e1.printStackTrace();
  }


 }

 
 
// 读取指定类型名的地理特征
  public   static   void  getFeatureSource(String sourceName) {
  
try   {
   fsBC 
=  pgDatastore.getFeatureSource(sourceName);
//    System.out.println(fsBC.getFeatures().size()); // 计算本图层中所有特征的数量
  }
  catch  (IOException e)  {
   e.printStackTrace();
  }
  
 }

 
// 取得POSTGIS中所有的地理图层
  public   static   void  getAllLayers() {
  
try   {
   String[] typeName 
=  pgDatastore.getTypeNames();
   
for ( int  i = 0 ;i < typeName.length;i ++ ) {
    System.out.println(typeName[i]);
   }

  }
  catch  (IOException e)  {
   e.printStackTrace();
  }

 }

 
public   static   void  getAttribute() {
  FeatureType ftBC
= fsBC.getSchema();
  System.out.println(ftBC.getAttributeCount());
  
for  ( int  i  =   0 ; i  <  ftBC.getAttributeCount(); i ++ {
      AttributeType at 
=  ftBC.getAttributeType( i );
      
// 判断属性类型是否为可分配
       if  ( ! Geometry. class .isAssignableFrom(at.getType()))
          System.out.print(at.getType() 
+   " \t " );
  }

  System.out.println();
  
for  ( int  i  =   0 ; i  <  ftBC.getAttributeCount(); i ++ {
      AttributeType at 
=  ftBC.getAttributeType( i );
      
if  ( ! Geometry. class .isAssignableFrom(at.getType()))
          System.out.print(at.getName() 
+   " \t " );
  }

 }

 
public   static   void  main(String[] args)  throws  IOException {
  ConnPostGis(
"" , " localhost " , 5432 , " navigation " , " root " , " aaaaa " );
  
/* 读取指定类型名的地理特征  */
  getFeatureSource(
" roads " );
  
/* 得到空间数据库中所有特征表的表名 */
//   PostGisReading();
    getAllLayers();
 }

}




        到周末了,这个周末事情貌似很多,明天,哦,不对,是今天要去老婆公司帮他们把动漫在线制作工厂的服务器配置起来。很是不爽的是拖了我的款一直没有结算,感觉很是对不起和我一起做这个兼职项目的兄弟。周日可能会去看看一片空置的地,呵呵,研究一下看看怎么能用这片地改善一下生活地说:)
       如果有空,周末将GeoTools写PostGis数据的代码整理一下。连接、读、写这都属于基本操作,不过对于资料严重匮乏的GeoTools而言我想还是能对志同道合的兄弟们一些帮助的。自己将这些代码贴出来的目的有二:一来监督自己的学习过程;二来希望能找到一批志同道合的朋友一起做一个基于开源项目的通用GIS/平台,平台的内容目前正在规划,感觉还是很不错的。
       2007年的一月就快要过去了,这个月感觉怎么说那。。。除了项目中有些很让人烦恼的事情以外,个人感觉还好,算是慢慢在又在望一线开发上靠拢。。。个人兴趣和工作之间的协调不是很好解决,目前唯一的调节方式就是。。。牺牲自己的睡眠时间了。。。
      唉。。。。两个星期没有回家了,这个星期又很困难。。。但愿老爸老妈不要怪我。。。LP这段时间对我意见很大,毕竟婚期就在4月,过了年就快要到了,对我的意见就是到现在我都不知道结婚到底应该怎么搞。。。。
     夜深了,感觉很是对不起自己的家人。。。。在这个卖身又卖艺的年代。。。真的好困惑!



posted on 2007-01-27 03:04 sinoly 阅读(3853) 评论(9)  编辑  收藏 所属分类: POSTGISGEOTOOLS

评论

# re: 使用GEOTOOLS(2.3)读取POSTGIS内容 2007-01-31 21:01 gale
在这个卖身又卖艺的年代。。。真的好困惑!

嘿嘿
同感  回复  更多评论
  

# re: 使用GEOTOOLS(2.3)读取POSTGIS内容 2007-02-01 14:26 梅颖
结婚都不知道怎么搞?信邪,呵呵,我来我来  回复  更多评论
  

# re: 使用GEOTOOLS(2.3)读取POSTGIS内容 2007-03-14 23:07 cyqian
“import org.geotools.data.DataStore;”

我找不到 org.geotools.data.DataStore ,只有一个datastore的抽象类,我用的也是2.3。请赐教~~谢谢。
  回复  更多评论
  

# re: 使用GEOTOOLS(2.3)读取POSTGIS内容 2007-03-15 09:12 sinoly
把你现在引入的包告诉我。。。
我现在导入了这么几个包:
geoapi-2.0.jar
gt2-api-2.2.1.jar
gt2-main-2.2.1.jar
gt2-postgis-2.2.1.jar
gt2-referencing-2.2.1.jar
gt2-render-2.2.1.jar
jts-1.7.1.jar
vecmath-1.3.1.jar

备注:这个是目前我的项目中的包,这个是用的geotools2.2
但是当初调试的时候确实是用的2.3中的包。实际上上面的程序是2.2/2.3都可以的
geotools的最大特点。。。。有点遗憾。。。包的分类相当的混乱
  回复  更多评论
  

# re: 使用GEOTOOLS(2.3)读取POSTGIS内容 2007-03-15 13:12 cyqian
阿~~知道了。在gt2-api-2.3.0里边。刚开始我没有导入它。十分感谢~  回复  更多评论
  

# re: 使用GEOTOOLS(2.3)读取POSTGIS内容 2007-03-28 11:20 CHOCHOC
看了你的BLOG后,发现世界不会这么小吧。我也是才抽空看看GIS方面的东西,而且你说的你老婆的动漫在线不会是银科大厦里面的那家吧,哦这样的话故事可就多了!望回复!
MSN:CHOC_CHO@HOTMAIL.COM  回复  更多评论
  

# re: 使用GEOTOOLS(2.3)读取POSTGIS内容 2007-03-29 08:51 sinoly
@CHOCHOC
呵呵,我在武汉滴说
银科大厦在中关村吧,以前在北京工作的时候取过很多次。。  回复  更多评论
  

# re: 使用GEOTOOLS(2.3)读取POSTGIS内容 2007-05-07 15:51 Classicning
多谢您的代码啊,我对Geotools真的是无语了,想要找点资料都这么难,还好有您这段代码

GeoTools太需要这种共享精神了。。。呵呵

继续学习GT和JTS。。。  回复  更多评论
  

# re: 使用GEOTOOLS(2.3)读取POSTGIS内容 2007-06-12 15:21 鸟舜鱼汤
偶然间闯进你的blog,最近刚开始研究geoserver和geotools的问题,看了你的一些见解,觉得比较深刻,希望能有机会得到赐教。。。。
对于你想做一个基于开源项目的通用GIS/平台,小弟也深有此意,只是苦于身边无志同道合之士,希望能够联系。

qq:7221681  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: