Wechat: yu389741| Email: gisdqy@163.com

Shop:https://www.giserdqy.com/shop

学习GeoTools的Data模块的相关内容(上)– (学习GIS【2】)


 

地理信息系统中最重要的东西莫过于就是数据了,而且我接触

GeoTools

的本意就是利用其处理众多标准的

Gis

格式文件的能力。所以首先从

GeoTools



Data

模块着手来开始学习

GeoTools



 

 Geotools_Data

 

 

Data
模块的定义见
 
http://docs.codehaus.org/display/GEOTDOC/10+Data



 

The Data module is all about hoisting data (usually in the form of features) off of external services, disk files etc… into your
application. This is where you can finally start putting the toolkit to work.

 

 
最后一句说明了这个模块的重要性
😛

 

 

 

因为

Data

模块的类很多,但是无外乎就是处理各种

GIS

文件格式(

Shape,mif/mid…

)。下面学习

Data

模块主要以处理

Shapefile

格式相关的部分。其他格式文件类似。

 

上面这张图来自



http://docs.codehaus.org/display/GEOTDOC/10+Data





是官方网站上学习和阐述

Data

模块的资料列表

 

下面就这张图的顺序记录下学习

Data

模块的心得。

 

Geotools_Data_List.

 

 

主要是下面几个类概括了整个

Data


模块的作用,需要特别注意

:


DataStore


DataAccess


FeatureSource


FeatureStore


 

04 How to Create a DataStore or DataAccess




http://docs.codehaus.org/display/GEOTDOC/04+How+to+Create+a+DataStore+or+DataAccess



 

 

DataStore

DataAccess
这两个类非常重要,要不然也不会在第一项就开始介绍了。

 

 

如果是数据是网页的话,则

DataStore

就是浏览器标准,各种

DataStore

接口实现的具体类的话就是各种类型的浏览器。

通过
DataStore
可以访问各种数据
(
Shapefiles, databases tables, etc.

 


)

 

下面是实现了
DataStrore
的各种“浏览器”

 

AbstractDataStore




,

 

AbstractDataStore2



,

 

AbstractFileDataStore



,

 

ArcSDEDataStore



,

 

CollectionDataStore



,

 

ContentDataStore



,

 

DB2DataStore



,

 

IndexedShapefileDataStore




,

 

JDBC1DataStore



,

JDBC2DataStore



,

 

JDBCDataStore



,

 

MemoryDataStore



,

 

PostgisDataStore



,

 

PropertyDataStore



,

 

ShapefileDataStore




,

 

WFS_1_0_0_DataStore



,

 

WFS_1_1_0_DataStore



 

如果我们要访问
Shapefile
文件格式的话,应该能猜到只要访问
SahpefileDataStore
就可以了:
P

 



DataAccess

又是什么?

 

首先
DataAccess
是接口,接口的目的无非就是规范所有子类的某个能力的标准,
DataAccess

就是规范所有子类访问数据信息和数据元信息的标准。

 

DataStore
实现了
DataAccess
接口,实际访问各种
Gis
格式数据的类又实现了
DataStore
接口,那么这些访问各种格式数据的具体类的访问数据信息和访问数据元信息的能力就被规范了。换个意思说
,
就是可以在不用细节的情况,可以通过几个简单的方法一致的访问所有数据源。

 

这里放上一个使用
ShapefileDataStore
的完整能运行的例子

import java.io.*;

import java.net.*;

 

import org.geotools.data.*;

import org.geotools.data.shapefile.*;

import org.opengis.feature.type.*;

 

public class UseShapefileDataStore {

 
public static void main(String[] args) {

   
try {

     
File file = new File(“C://

河流
//hh_rivers_alber.shp”);

     
URI namespace = new URI(“refractions”);

     
boolean useMemoryMapped = true;

     
DataStore shapefile = new ShapefileDataStore

(file.toURI().toURL(), namespace, useMemoryMapped);

     
String[] typeName = shapefile.getTypeNames(); // should be “example”

     
if (typeName != null && typeName.length >= 1) {

       
FeatureType schema = shapefile.getSchema(typeName[0]); // should be “refractions.example”

       
System.out.println(“schema” + schema.getCoordinateReferenceSystem());

       
FeatureSource contents = shapefile.getFeatureSource(typeName[0]);

       
int count = contents.getCount(Query.ALL);

       
System.out.println(“Connected to ” + file + ” with ” + count);

     
}

   
}

   
catch (Exception ex) {

     
ex.printStackTrace();

   
}

 
}

}

 

 

 

 

05 DataAccess and DataStore




http://docs.codehaus.org/display/GEOTDOC/05+DataAccess+and+DataStore



 

这里还是讲了
DataAccess

DataStore
,然后列举了一些最常用的方法

interface
DataAccess<T
extends
FeatureType, F
extends
Feature>{

 
ServiceInfo getInfo();//

返回元信息(简单的元信息)

 
List<Name> getNames();//

返回所有数据源的名字

 
T getSchema(Name name);//Schema

信息的信息

 
FeatureSource<T,F> getFeatureSource(Name typeName);//

下面一节会讲到FeatureSource

}

 

interface
DataStore
extends
DataAccess<SimpleFeatureType, SimpleFeature>{

 

String
[] getTypeNames();

 
SimpleFeatureType getSchema(

String
typeName );

 
FeatureSource<SimpleFeatureType, SimpleFeature> getFeatureSource(

String
typeName );

 

}

 

 

 

06 FeatureSource



http://docs.codehaus.org/display/GEOTDOC/06+FeatureSource



 

FeatureSource is probably the reason you came to this party; it let’s you access geospatial information as Java objects.

 

这里出现了第三个非常重要的接口
FeatureSource

 

FeautreSource

定义了访问具体访问空间数据的标准方法

,那么
DataAccess
中访问空间数据的能力实际上就是
DataAccess
具有访问
FeatureSource
的能力,这样它实际上也具有了访问空间数据的能力。

 

interface FeatureSource<T extends FeatureType, F extends Feature> {

 
DataAccess<T, F> getDataStore()

 
Envelope getBounds()

 
Envelope getBounds(Query)

 
int getCount(Query)

 

 
FeatureCollection<T, F> getFeatures()

 
FeatureCollection<T, F> getFeatures(Filter)

 
FeatureCollection<T, F> getFeatures(Query)

 
T getSchema()

 

 
void addFeatureListener(FeatureListener)

 
void removeFeatureListener(FeatureListener)

}

 

FeautreSource

具有获得空间数据的边界,获得局部空间数据的边界,获得空间数据,获得过滤后的空间数据,获得查询后的空间数据。。。。的能力,具体代码见

http://docs.codehaus.org/display/GEOTDOC/06+FeatureSource





 

07 FeatureStore


http://docs.codehaus.org/display/GEOTDOC/07+FeatureStore


 

FeatureStore

接口具有添加,修改,删除空间数据的能力,但是首先它得具有访问空间数据的能力,访问空间数据能力是通过实现
FeatureSource

接口实现的

 

下面是实现了
FeatureStore

接口的一些具体类

AbstractFeatureLocking




,

 

AbstractFeatureStore



,

 

ArcSdeFeatureStore



,

 

ContentFeatureStore



,

 

DB2FeatureLocking




,

 

DB2FeatureStore



,

 

JDBCFeatureLocking



,

 

JDBCFeatureStore



,

PostgisFeatureLocking



,

 

PostgisFeatureStore



,

 

PropertyFeatureSource



,

 

ShapefileFeatureLocking



,

 

ShapefileFeatureStore



,

 

WFSFeatureStore




 

具有编辑

Shapefile


数据能力的类一下子就看出了,是

ShapefileFeatureStore

 

添加删除修改空间数据的代码见

http://docs.codehaus.org/display/GEOTDOC/07+FeatureStore


 


ß

——————————–

有时间在这里添加一个完整的样例)

转载自:https://blog.csdn.net/xcl119xcl/article/details/4787231