net.refractions.udig.transformtool.TransformDialog.java Source code

Java tutorial

Introduction

Here is the source code for net.refractions.udig.transformtool.TransformDialog.java

Source

/*
 *    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);
    }

}