刚刚开始学习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月,过了年就快要到了,对我的意见就是到现在我都不知道结婚到底应该怎么搞。。。。
夜深了,感觉很是对不起自己的家人。。。。在这个卖身又卖艺的年代。。。真的好困惑!