Java tutorial
/* * Geotools2 - OpenSource mapping toolkit * http://geotools.org * (C) 2002-2006, Geotools Project Managment Committee (PMC) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package net.refractions.udig.transformtool; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.List; import net.refractions.udig.project.IBlackboard; import net.refractions.udig.project.IMap; import net.refractions.udig.project.internal.Layer; import net.refractions.udig.project.internal.impl.LayerImpl; import net.refractions.udig.project.ui.ApplicationGIS; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.geotools.referencing.operation.builder.MappedPosition; import org.geotools.referencing.operation.builder.MathTransformBuilder; /** * Dialog for transforming the layer. * * @author jezekjan */ public class TransformDialog extends Dialog { private LayerImpl sourceLayer; int i; /** * Creates the dialog for transformations. * @param parentShell */ public TransformDialog(Shell parentShell) { super(parentShell); } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText("Transform Tool"); } protected Control createDialogArea(Composite parent) { /*PlatformUI.getWorkbench().getHelpSystem().setHelp( this.dialogArea, "org.eclipse.help.transformtoolhelp");*/ // Label label; GridData gridData; Composite container = (Composite) super.createDialogArea(parent); GridLayout layout = new GridLayout(); layout.numColumns = 2; container.setLayout(layout); final RadioGroupComposite radios = new RadioGroupComposite(); IMap map = ApplicationGIS.getActiveMap(); IBlackboard blackboard = map.getBlackboard(); if (blackboard.get(TransformTool.BLACKBOARD_SOURCELAYER) == null) { sourceLayer = (LayerImpl) map.getEditManager().getSelectedLayer(); blackboard.put(TransformTool.BLACKBOARD_SOURCELAYER, sourceLayer); } final Label label = new Label(container, SWT.SINGLE); label.setText("Source Layer:"); gridData = new GridData(); gridData.verticalSpan = 1; gridData.horizontalSpan = 1; gridData.horizontalAlignment = GridData.FILL; gridData.grabExcessHorizontalSpace = true; label.setLayoutData(gridData); final ComboViewer comboViewer = new ComboViewer(container, SWT.SINGLE); comboViewer.setLabelProvider(new LayerLabelProvider()); comboViewer.setContentProvider(new ArrayContentProvider()); comboViewer.setInput(map.getMapLayers().toArray()); comboViewer.setSelection((ISelection) (new StructuredSelection( (Layer) blackboard.get(TransformTool.BLACKBOARD_SOURCELAYER))), true); gridData = new GridData(); gridData.verticalSpan = 2; gridData.horizontalSpan = 2; gridData.verticalAlignment = GridData.FILL; gridData.horizontalAlignment = GridData.FILL; gridData.grabExcessHorizontalSpace = true; comboViewer.getCombo().setLayoutData(gridData); comboViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); IMap map = ApplicationGIS.getActiveMap(); IBlackboard blackboard = map.getBlackboard(); blackboard.put(TransformTool.BLACKBOARD_SOURCELAYER, (LayerImpl) selection.getFirstElement()); System.out.println("Selected: " + selection.getFirstElement()); sourceLayer = (LayerImpl) selection.getFirstElement(); radios.refresh(); } }); //*******************Vector Group************* gridData = new GridData(); gridData.horizontalSpan = 2; gridData.verticalSpan = 1; (new VectorToolComposite(container)).addWidgets(gridData, radios); // *******************Radio Group************* gridData = new GridData(); gridData.horizontalSpan = 2; gridData.grabExcessHorizontalSpace = true; gridData.verticalSpan = 3; gridData.horizontalAlignment = GridData.FILL; radios.addRadios(container, gridData); //**********************Info and transform group***** Button infoButton = new Button(container, SWT.BUTTON1); infoButton.setText("Transformation info"); Button transButton = new Button(container, SWT.BUTTON1); transButton.setText("Transform"); gridData = new GridData(); gridData.verticalSpan = 1; gridData.horizontalSpan = 2; gridData.horizontalAlignment = GridData.FILL; gridData.grabExcessHorizontalSpace = true; infoButton.setLayoutData(gridData); transButton.setLayoutData(gridData); transButton.setEnabled(true); transButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { (new DialogUtility()).transClick(); getShell().close(); } }); infoButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { Display.getDefault().syncExec(new Runnable() { public void run() { IMap map = ApplicationGIS.getActiveMap(); IBlackboard blackboard = map.getBlackboard(); Object mt = blackboard.get(TransformTool.BLACKBOARD_MATHTRANSFORM); MathTransformBuilder calculator = (MathTransformBuilder) blackboard .get(TransformTool.BLACKBOARD_CALCULATOR); int number = ((List<MappedPosition>) blackboard.get(VectorLayerReader.BLACKBOARD_PTS)) .size(); // Layer sourceLayer = (Layer) blackboard.get(TransformTool.BLACKBOARD_SOURCELAYER); //CoordinateReferenceSystem c = sourceLayer.getCRS(); try { double m = calculator.getErrorStatistics().rms(); NumberFormat foramter = new DecimalFormat("0.00E0"); String error = foramter.format(m); //m = Math.round(m*1000)/1000 ; String info = "Transformation summary" + "\n" + "\n" + "Number of ground control points: " + number + "\n" + "\n" + "Cartesian Standard deviation = " + error + " " + ((Layer) blackboard.get(TransformTool.BLACKBOARD_SOURCELAYER)).getCRS() .getCoordinateSystem().getAxis(0).getUnit() + "\n" + "\n" + mt.toString() + "\n" ; Dialog dialog = new InfoDialog(Display.getDefault().getActiveShell(), info); dialog.open(); /* MessageDialog.openInformation(Display.getDefault() .getActiveShell(), "Transformation summary", "Number of idetical points: " + ptSrc.length + "\n" + "\n" + "Standard deviation = " + m +"\n" + "\n" + "\n" + mt.toWKT()+"\n"+ "SourceLayer coordiante System"+ sourceLayer); */ } catch (Exception e) { MessageDialog.openInformation(Display.getDefault().getActiveShell(), "Transformation summary", e.toString()); } } }); } }); return container; } @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } }