当前位置: 首页 > 工具软件 > ContentTools > 使用案例 >

GeoTools-数据组织结构

南门棋
2023-12-01

GeoTools-数据组织结构

sf2gis@163.com

2016年1月29日

 

1  目标:读写不同格式的数据,进行统一的管理和操作。

2 原理:使用DataAccess以不同格式的驱动读写各种文件,使用FeatureSource管理要素数据。使用Style(SLD)管理样式,使用Layer管理显示。使用MapContent管理所有地图相关信息。

3 流程:创建图层(打开地图文件,获取要素数据源,创建要素样式)。创建地图Model(图层和地图UI)

3.1 创建图层:打开地图文件,获取要素数据源,创建要素样式。

           FileDataStore ds =FileDataStoreFinder.getDataStore(newURL("file://D:/Data/shapefiles/states.shp"));

           SimpleFeatureStore sfs =(SimpleFeatureStore) ds.getFeatureSource();

          

           Style style =SLD.createSimpleStyle(sfs.getSchema());

           Layer layer = newFeatureLayer(sfs,style);

3.2 创建地图Model(图层和地图UI)

           MapContent map = new MapContent();

           map.setTitle("GtDemoXX");

           map.addLayer(layer);

3.3 示例

//Main.java

package lee;

 

importjava.io.File;

importjava.io.IOException;

 

importorg.geotools.data.FileDataStore;

importorg.geotools.data.FileDataStoreFinder;

importorg.geotools.data.simple.SimpleFeatureSource;

importorg.geotools.map.FeatureLayer;

importorg.geotools.map.Layer;

importorg.geotools.map.MapContent;

importorg.geotools.styling.SLD;

importorg.geotools.styling.Style;

importorg.geotools.swing.JMapFrame;

importorg.geotools.swing.data.JFileDataStoreChooser;

 

public class Main{

 

      public static void main(String[] args)throws IOException {

           // TODO Auto-generated method stub

           File file =JFileDataStoreChooser.showOpenFile("shp", null);

           if(null==file){

                 System.out.println("file==null");

           }

          

           FileDataStore fds=FileDataStoreFinder.getDataStore(file);

           SimpleFeatureSourcesfs=fds.getFeatureSource();

          

           MapContent map=new MapContent();

           map.setTitle("GtDemoxx");

           Style style=SLD.createSimpleStyle(fds.getSchema());

           Layer lyr = new FeatureLayer(sfs,style);

           map.addLayer(lyr);

           JMapFrame.showMap(map);

          

      }

 

}

4 方法:数据访问DataAccess、DataStore:提供数据存储位置中可用的数据源,数据源的类型和信息。

4.1 目标:访问文件或数据服务,获取存储的信息。

4.2 原理:根据不同类型文件的驱动(需要提前注册),扫描指定位置,从驱动中读取信息。

4.3 方法:继承关系、成员方法

4.3.1继承关系:DataAccess《-DataStore《—具体DataStore

DataAccess

-|DataStore

--|FileDataStore

--|AbstractDataStore

4.3.2成员方法

4.3.2.1  获取要素数据源:getFeatureSource()。

4.3.2.2  三种类型的要素数据源:FeatureSource(只读),FeatureStore(读写),FeatureLocking(线程安全的)。

4.3.2.3  获取数据访问:使用相应DataStoreFinder的 getDataStore()等相关函数。

5 方法:要素数据源FeatureSource、FeatureStore,FeatureLocking:获取要素数据用于显示、操作。

5.1 目标:操作要素,获取要素数据,以及要素的整体范围、要素总数等相关信息。

5.2 原理:使用相应格式的驱动读写数据。

5.3 方法

5.3.1继承关系:FeatureSource《-FeatureStore《—FeatureLocking

5.3.2成员方法 

5.3.2.1  获取要素getFeatures():返回要素集合,可以设置条件。

5.3.2.2  获取要素类型getSchema():如果是同种要素,则返回要素类型;如果是不同种要素,则返回所有要素的最基本公共类型。

6 方法:图层样式Style:设置图层中要素的显示样式。

6.1 目标:要素的显示样式,使用SLD定义。

6.2 原理:构造SLD(XML格式)定义图层要素的显示样式。

使用SLD类直接创建样式。

6.3 方法:使用SLD创建Style。

创建样式:如createLineStyle()等,包含各种类型的静态函数。

7 方法:图层Layer:显示要素集的基本组织,包括数据和样式。

7.1 目标:显示的基本单位,用于要素集的渲染。

7.2 原理:组织图层的要素和样式,以及其它用于显示的信息。

7.3 方法

7.3.1继承关系:Layer《-StyleLayer《-FeatureLayer

7.3.2成员方法

7.3.2.1  创建对象:使用要素数据源和样式创建。

Layer layer = new FeatureLayer(sfs,style);

8 方法:地图模型MapContent:地图的数据模型Model,包括所有Layer及显示相关的属性、方法、交互等。

8.1 目标:地图的Model,用于盛放与地图有关的所有信息。

8.2 原理:图层管理+UI信息+事件交互

8.3 方法

8.3.1继承关系:顶层类,主要用于管理

8.3.2成员方法

图层管理:图层的CRUD。

UI信息:地图名称,范围等。

事件交互:图层事件等。

 类似资料: