⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testwidget.java

📁 aresde 空间数据开发 例子
💻 JAVA
字号:
/**
 * @(#) TestWidget.java 2007-11-1
 *
 * TIANHUI 2007
 */
package com.th.workframe;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;

import com.esri.arcgis.beans.TOC.TOCBean;
import com.esri.arcgis.beans.map.MapBean;
import com.esri.arcgis.beans.toolbar.ToolbarBean;
import com.esri.arcgis.carto.FDOGraphicsLayerFactory;
import com.esri.arcgis.carto.FeatureLayer;
import com.esri.arcgis.carto.IFDOGraphicsLayerFactory;
import com.esri.arcgis.carto.IFeatureLayer;
import com.esri.arcgis.carto.IImageDisplay;
import com.esri.arcgis.carto.IMapDescription;
import com.esri.arcgis.carto.ImageDisplay;
import com.esri.arcgis.carto.MapExtent;
import com.esri.arcgis.carto.MapServer;
import com.esri.arcgis.carto.esriViewDrawPhase;
import com.esri.arcgis.controls.ControlsMapFullExtentCommand;
import com.esri.arcgis.controls.ControlsMapPanTool;
import com.esri.arcgis.controls.ControlsMapZoomInTool;
import com.esri.arcgis.controls.ControlsMapZoomOutTool;
import com.esri.arcgis.controls.IMapControlEvents2Adapter;
import com.esri.arcgis.controls.IMapControlEvents2OnMouseDownEvent;
import com.esri.arcgis.controls.IMapControlEvents2OnMouseUpEvent;
import com.esri.arcgis.controls.IToolbarControlEventsAdapter;
import com.esri.arcgis.controls.IToolbarControlEventsOnItemClickEvent;
import com.esri.arcgis.datasourcesGDB.SdeWorkspaceFactory;
import com.esri.arcgis.geodatabase.IDataset;
import com.esri.arcgis.geodatabase.IEnumDataset;
import com.esri.arcgis.geodatabase.IFeatureClass;
import com.esri.arcgis.geodatabase.IFeatureWorkspace;
import com.esri.arcgis.geodatabase.INetworkQuery;
import com.esri.arcgis.geodatabase.NetworkDataset;
import com.esri.arcgis.geometry.Envelope;
import com.esri.arcgis.geometry.IEnvelope;
import com.esri.arcgis.geometry.IPoint;
import com.esri.arcgis.geometry.IPointCollection;
import com.esri.arcgis.geometry.Point;
import com.esri.arcgis.interop.AutomationException;
import com.esri.arcgis.system.AoInitialize;
import com.esri.arcgis.system.EngineInitializer;
import com.esri.arcgis.system.LongArray;
import com.esri.arcgis.system.PropertySet;
import com.esri.arcgis.system.esriLicenseProductCode;
import com.esri.arcgis.systemUI.esriCommandStyles;


/**
 * <code><strong> TestWidget  简单类说明 </strong><code> 
 * 
 * @author <strong> GUJUN </strong>
 * @version 2007-11-1 上午09:02:13
 * @since 1.0
 */
public class TestWidget
extends JFrame {
	
	/* ArcGIS */
	private AoInitialize aoInit = null;
	private IFeatureWorkspace ifw = null;
	
	private MapBean map = null;
	private MapServer server = null;
	private IImageDisplay imageDisplay = null;
	private NetworkDataset pNetDataset = null;
	private INetworkQuery pNetworkQuery = null;
	private String mapName = null;
	private IMapDescription mapDescription = null;
	
	private ToolbarBean toolbar = null;
	
	private TOCBean tcb = null;
	
	private boolean select = false;
	private IPoint ipt0 = null;
	private IPoint ipt1 = null;
	private IEnvelope currentExtent = null;
	
	/* 框架组件 */
	private JPanel panelMain = null;
	
	private JTextArea console = null; 
	
	
	/**
	 * 构造函数
	 * @throws Exception 
	 */
	public TestWidget() throws Exception {
		
		super("ArcGIS 的地图渲染与修饰");
		
		//注册Engine
		EngineInitializer.initializeVisualBeans();
		aoInit = new AoInitialize();
		aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
		
		//连接SDE
		connectionSDE();
		//构建地图
		buildMap();
		//构建工具栏
		buildToolBar();
		//构建左侧图层树
		buildTOC();
		
		addEventListeners();
		
		
		//构建窗口面板布局
		JSplitPane spaneRight = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, map, buildRightBottomPanel());
		JSplitPane spaneMain = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, false, tcb, spaneRight);
		//设置splitbar的宽度
		spaneMain.setDividerSize(8);
		spaneRight.setDividerSize(8);
		//设置分割面板的初始宽度
		spaneMain.setDividerLocation(260);
		spaneRight.setDividerLocation(680);
		//设置最小尺寸
		spaneRight.setMinimumSize(new Dimension(1024, 0));
		
		
		//加入组件到主面板
		panelMain = new JPanel(new BorderLayout());
		panelMain.add("Center", spaneMain);
		panelMain.add("North", toolbar);
		
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				String msg = "关闭?";
				int flag = JOptionPane.showConfirmDialog(null, msg, "确认信息", JOptionPane.YES_NO_OPTION);
				if(flag == JOptionPane.YES_OPTION) {
					((JFrame)we.getSource()).setVisible(false);
					try { aoInit.shutdown(); }catch (Exception e) { }
					System.exit(0);
				}//Endif
			}
		});
		
		this.setContentPane(panelMain);
		this.setBounds(100, 100, 800, 600);
		this.setExtendedState(JFrame.MAXIMIZED_BOTH);
		
		this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		
		this.setVisible (true);
	}
	
	/**
	 * 连接SDE
	 */
	public void connectionSDE() throws Exception {
		PropertySet ps = new PropertySet();
		ps.setProperty("SERVER", "192.168.1.220");
		ps.setProperty("INSTANCE", "5151");
		ps.setProperty("USER", "SDE");
		ps.setProperty("PASSWORD", "SDE");
		ps.setProperty("VERSION", "SDE.DEFAULT");
		SdeWorkspaceFactory swf = new SdeWorkspaceFactory();
		ifw = (IFeatureWorkspace) swf.open(ps, 0);
	}
	
	/**
	 * buildMap() 构建地图组件
	 */
	public void buildMap() throws Exception {
		
		map = new MapBean();
		
		//去掉地图边框.很关键,影响map的显示尺寸
		map.setBorderStyle(com.esri.arcgis.controls.esriControlsBorderStyle.esriNoBorder);
		map.setShowScrollbars(false);
		map.setBackColor(0);
		
		imageDisplay = new ImageDisplay();
		imageDisplay.setDeviceResolution(96);
		
		server = new MapServer();
		server.startWithData(ifw.openFeatureDataset("SLB1027_"));
		
		//开始加载
		IEnumDataset edst = ifw.openFeatureDataset("SLB1027_").getSubsets();
		IDataset ds = edst.next();
		while(ds != null) {
			
			System.out.print("加载 " + ds.getName() + "....");
			
			int tmpType = ds.getType();
			
			if(tmpType == com.esri.arcgis.geodatabase.esriDatasetType.esriDTNetworkDataset) {
				pNetDataset = new NetworkDataset(ds);
				pNetworkQuery = (INetworkQuery)pNetDataset;
			}else if(tmpType == com.esri.arcgis.geodatabase.esriDatasetType.esriDTFeatureClass) {
				IFeatureClass ifc = ifw.openFeatureClass(ds.getName());
				if(ds.getName().indexOf("Junction") < 0) {
					if(ds.getName().indexOf("Text_Layer") < 0) {
						IFeatureLayer layer = new FeatureLayer();
						layer.setName(ds.getName());
						layer.setFeatureClassByRef(ifc);
						map.addLayer(layer, 0);
					}else {
						IFDOGraphicsLayerFactory fdoFactory = new FDOGraphicsLayerFactory();
						map.addLayer(fdoFactory.openGraphicsLayer(ifw, ifw.openFeatureDataset("SLB1027_"), ds.getName()), 0);
					}//Endif
				}//Endif
			}//Endif
			System.out.println(" 完成");
			ds = edst.next();
		}//Endwhile
		
		mapName = server.getMapName(0);
		mapDescription = server.getServerInfo(mapName).getDefaultMapDescription();
		
		map.refresh(esriViewDrawPhase.esriViewGeography, null, null);
	}
	
	/**
	 * buildToolBar() 构建工具栏组件
	 */
	public void buildToolBar() throws Exception {
		
		toolbar = new ToolbarBean();
		toolbar.setItemsString("8|controls/ControlsSelectTool|0|-1|0|0|1;5|controls/ControlsAddDataCommand|0|-1|0|0|1");
		//设置工具栏停止任何自动发生的更新
		toolbar.setUpdateInterval(0);
		
		toolbar.addItem( new ControlsMapZoomInTool(), 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly );
		toolbar.addItem( new ControlsMapZoomOutTool(), 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly );
		toolbar.addItem( new ControlsMapPanTool(), 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly );
		toolbar.addItem( new ControlsMapFullExtentCommand(), 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly );
		
		toolbar.setBuddyControl(map);
	}
	
	/**
	 * buildTOC() 构建左侧图层树组件
	 */
	public void buildTOC() throws Exception {
		tcb = new TOCBean();
		tcb.setLabelEdit(1);
		tcb.setBuddyControl(map);
		//设置宽度最小尺寸
		tcb.setMinimumSize(new Dimension(260, 0));
	}

	/**
	 * buildRightBottomPanel() 构建右侧下方面板
	 */
	public JTabbedPane buildRightBottomPanel() {
		
		//控制台文本框
		console = new JTextArea(12, 25);
		JScrollPane sp = new JScrollPane(console);
		sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		console.setAutoscrolls(true);

		
		//渲染面板
		JPanel widget = new JPanel();
		
		//标签面板
		JTabbedPane tp = new JTabbedPane();
		
		tp.addTab("控制台", new ImageIcon("image/img01.gif"), sp);
		tp.addTab("渲染设置", new ImageIcon("image/img02.gif"), widget);
		
		return tp;
	}

	/**
	 * addEventListeners() 添加事件监听
	 * @throws Exception 
	 */
	public void addEventListeners() throws Exception {
		
		//工具栏事件监听
		toolbar.addIToolbarControlEventsListener(new IToolbarControlEventsAdapter() {
			public void onItemClick(IToolbarControlEventsOnItemClickEvent ice) throws IOException, AutomationException {
				if(select && ice.getIndex() > 2)
					return;
				//如果是工具栏上的选择按钮
				if(ice.getIndex() == 4) {
					select=true;
				}else {
					select=false;
				}//Endif
			}
		});
		
		//地图事件监听
		map.addIMapControlEvents2Listener(new IMapControlEvents2Adapter() {
			//鼠标按下
			public void onMouseDown(IMapControlEvents2OnMouseDownEvent mdEvent) throws IOException {
				if(mdEvent.getButton() == 1 && select) {
					LongArray longArrayX = new LongArray();
					LongArray longArrayY = new LongArray();
					longArrayX.add(mdEvent.getX()-10);
					longArrayX.add(mdEvent.getX()+10);
					longArrayY.add(mdEvent.getY()-10);
					longArrayY.add(mdEvent.getY()+10);

					MapExtent mapExtent = new MapExtent();
					mapExtent.setExtent(map.getExtent());
					mapDescription.setMapArea(mapExtent);

					imageDisplay.setHeight(map.getHeight());
					imageDisplay.setWidth(map.getWidth());
					
					IPointCollection pc = server.toMapPoints(mapDescription, imageDisplay, longArrayX, longArrayY);
					
					ipt0 = new Point();
					ipt0.putCoords(mdEvent.getMapX(), mdEvent.getMapY());
					
					currentExtent = new Envelope();
					currentExtent.setXMax(pc.getPoint(1).getX());
					currentExtent.setXMin(pc.getPoint(0).getX());
					currentExtent.setYMax(pc.getPoint(0).getY());
					currentExtent.setYMin(pc.getPoint(1).getY());
					
					//identify();
				}
			}
			
			//鼠标弹起
			public void onMouseUp(IMapControlEvents2OnMouseUpEvent muEvent) throws IOException, AutomationException {
				if(muEvent.getButton() == 1 && select) {
					ipt1 = new Point();
					ipt1.putCoords(muEvent.getMapX(), muEvent.getMapY());
					
					if(ipt0.getX() != ipt1.getX() || ipt0.getY() != ipt1.getY()) {
						currentExtent= new Envelope();
						if(ipt0.getX() >= ipt1.getX() && ipt0.getY() <= ipt1.getY()) {
							//向左上拉
							currentExtent.putCoords(ipt0.getX(), ipt0.getY(), ipt1.getX(), ipt1.getY());
						}else if(ipt0.getX() <= ipt1.getX() && ipt0.getY() <= ipt1.getY()) {
							//向右上拉
							currentExtent.putCoords(ipt1.getX(), ipt0.getY(), ipt0.getX(), ipt1.getY());
						}else if(ipt0.getX() >= ipt1.getX() && ipt0.getY() >= ipt1.getY()) {
							//向右下拉
							currentExtent.putCoords(ipt0.getX(), ipt1.getY(), ipt1.getX(), ipt0.getY());
						}else if(ipt0.getX() <= ipt1.getX() && ipt0.getY() >= ipt1.getY()) {
							//向左下拉
							currentExtent.putCoords(ipt1.getX(), ipt1.getY(), ipt0.getX(), ipt0.getY());
						}//Endif
						//identify();
					}//Endif
				}//Endif
			}

			
			
		}
		);
		
	}
	
	
	
	//console.append("x:" + muEvent.getMapX() + "      y:" + muEvent.getMapY() + "\n");
	//console.setCaretPosition(console.getText().length());
	
	
	
	/**
	 * 程序入口
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		UIManager.setLookAndFeel ("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		try {
			new TestWidget();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		

	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -