GeoTools-Swing显示原理

GeoTools-Swing显示原理

[email protected]

2016年1月29日

2016年2月3日修正JMapPane继承层次

 

1  目标:GeoTools的GUI显示,验证GeoTools功能,示例教学。

一般工程中不推荐使用。

2 原理:基于Swing进行显示、交互。

3 流程:创建图层(打开地图文件,获取要素数据源,创建要素样式)。创建地图Model(图层和地图UI),创建地图框架(地图和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 创建地图框架(地图和UI),配置框架组件

           JMapFrame mf = new JMapFrame(map);

           mf.setBounds(0, 0, 800, 600);

           mf.enableLayerTable(true);

           mf.enableStatusBar(true);

           mf.enableTool(Tool.PAN);

           mf.setVisible(true);

3.4 示例

package lee;

 

importjava.io.IOException;

importjava.net.URL;

 

import org.geotools.data.FileDataStore;

importorg.geotools.data.FileDataStoreFinder;

importorg.geotools.data.simple.SimpleFeatureStore;

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.JMapFrame.Tool;

 

public class Main{

 

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

           // TODO Auto-generated method stub

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

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

          

           MapContent map = new MapContent();

           map.setTitle("GtDemoXX");

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

           Layer layer = newFeatureLayer(sfs,style);

           map.addLayer(layer);

          

           JMapFrame mf = new JMapFrame(map);

           mf.setBounds(0,0, 800, 600);

           mf.enableLayerTable(true);

           mf.enableStatusBar(true);

           mf.enableTool(Tool.PAN);

           mf.setVisible(true);

      }

 

}

4 方法:组织结构

JMapFrame

-|JMapPane

--|MapContent

---|Layer

----|Style
----|FeatureStore

-|JToolBar

-|StatusBar

-|MapLayerTabale

 

5 方法:地图窗口JMapPane:显示地图,地图的View。

5.1 目标:绘制MapContent(Model)。

5.2 原理:继承JPanel,重写paintComponent()绘图。

双缓冲绘制:drawLayers()使用baseImage作为画布,将所有要素绘制在其上,再在paintComponent()中绘制到窗口。

5.3 方法

5.3.1继承关系:JPanel,MapPane《-AbstractMapPane《-JMapPane。

5.3.2成员方法

绘制到缓冲区:drawLayers(),绘制到缓冲区。

缓冲区绘制到GUI:paintComponent()将缓冲区绘制到GUI。

6 方法:图层控制MapLayerTable:控制地图中所有图层的属性、显隐、选中等状态。地图的控制器。

6.1 目标:控制地图中所有图层的属性、显隐、选中等状态的控件。

6.2 原理:响应UI事件,根据UI是否选中显示按钮来设置JMapPane中的属性。

6.3 方法

6.3.1继承关系:JPanel《-MapLayerTable

6.3.2成员方法

显示隐藏控制:onLayerItemClicked()检查是否选中显示。

7 方法:地图框架JMapFrame:地图及其它相关的UI框架。

7.1 目标:控制地图的基本框架,包括地图,工具,状态栏,图层管理等。

7.2 原理:在JMapFrame中添加相关控件。

7.3 流程:参见:流程:创建图层(打开地图文件,获取要素数据源,创建要素样式)。创建地图Model(图层和地图UI),创建地图框架(地图和UI),配置框架组件。

7.4 方法

7.4.1继承关系:JFrame《-JMapFrame

7.4.2成员方法

图层管理器:enableLayerTable(true)。

工具栏:enableToolBar(true)。

工具:enableTool(Tool.PAN)。将覆盖enableToolBar()设置。

状态栏:enableStatusBar(true)。

显示状态:setVisibale(true)。

默认显示:showMap(map),静态函数,默认创建JMapFrame实例并初始化各种参数。

        final JMapFrame frame = newJMapFrame(content);

        frame.enableStatusBar(true);

        frame.enableToolBar(true);

        frame.initComponents();

        frame.setSize(800, 600);

        frame.setVisible(true);

8 方法:常用对话框:文件选择,字体选择,样式选择。

8.1 文件选择:JFileDataStoreChooser。

8.2 字体选择:JFontChooser

8.3 样式选择:JSimpleStyleDialog。

示例:选择图层样式。

 

package lee;

 

import java.io.IOException;

import java.net.URL;

 

import org.geotools.data.FileDataStore;

importorg.geotools.data.FileDataStoreFinder;

importorg.geotools.data.simple.SimpleFeatureStore;

importorg.geotools.map.FeatureLayer;

importorg.geotools.map.Layer;

importorg.geotools.map.MapContent;

import org.geotools.styling.Style;

importorg.geotools.swing.JMapFrame;

importorg.geotools.swing.JMapFrame.Tool;

importorg.geotools.swing.styling.JSimpleStyleDialog;

 

public class Main {

 

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

           // TODO Auto-generated method stub

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

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

          

           MapContent map = new MapContent();

           map.setTitle("GtDemoXX");

            Style style =JSimpleStyleDialog.showDialog(null,sfs.getSchema());

           Layer layer = new FeatureLayer(sfs,style);

           map.addLayer(layer);

          

           JMapFrame mf = new JMapFrame(map);

           mf.setBounds(0, 0, 800, 600);

           mf.enableLayerTable(true);

           mf.enableStatusBar(true);

           mf.enableTool(Tool.PAN);

           mf.setVisible(true);

      }

 

}

8.4 向导对话框

数据源向导:JDataStoreWizard。

参数向导:JParameterLisWizard。

向导基类:JWizard。

 

你可能感兴趣的:(swing,Gis,geotools,gt-swing,JMapPane)