/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2011, Open Source Geospatial Foundation (OSGeo)
*
* 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 org.geotools.swing.tool;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.geometry.DirectPosition2D;
import org.opengis.referencing.operation.MathTransform;
/**
* Contains static methods used by some {@code InfoToolHelper} classes.
*
* @author Michael Bedward
* @since 8.0
*
* @source $URL$
* @version $URL$
*/
public class InfoToolHelperUtils {
/**
* Transforms a position. If {@code transform} is {@code null} the original
* position is returned.
*
* @param pos the position
*
* @return the transformed position
*/
public static DirectPosition2D getTransformed(DirectPosition2D pos, MathTransform transform) {
if (transform != null) {
try {
return new DirectPosition2D(transform.transform(pos, null));
} catch (Exception ex) {
throw new IllegalStateException(ex);
}
}
return pos;
}
/**
* Convert the Object returned by {@linkplain GridCoverage2D#evaluate(DirectPosition)}
* into an array of {@code Numbers}.
*
* @param objArray an Object representing a primitive array
*
* @return a new array of Numbers
*/
public static Number[] asNumberArray(Object objArray) {
Number[] numbers = null;
if (objArray instanceof byte[]) {
byte[] values = (byte[]) objArray;
numbers = new Number[values.length];
for (int i = 0; i < values.length; i++) {
numbers[i] = ((int)values[i]) & 0xff;
}
} else if (objArray instanceof int[]) {
int[] values = (int[]) objArray;
numbers = new Number[values.length];
for (int i = 0; i < values.length; i++) {
numbers[i] = values[i];
}
} else if (objArray instanceof float[]) {
float[] values = (float[]) objArray;
numbers = new Number[values.length];
for (int i = 0; i < values.length; i++) {
numbers[i] = values[i];
}
} else if (objArray instanceof double[]) {
double[] values = (double[]) objArray;
numbers = new Number[values.length];
for (int i = 0; i < values.length; i++) {
numbers[i] = values[i];
}
}
return numbers;
}
}