org.openjump.core.apitools
Class FeatureCollectionTools

java.lang.Object
  extended by org.openjump.core.apitools.ToolToMakeYourLifeEasier
      extended by org.openjump.core.apitools.FeatureCollectionTools

public class FeatureCollectionTools
extends ToolToMakeYourLifeEasier

Class to speed up handling of FeatureCollections (or lists of features) during progamming by implementing a set of common tasks. Most functions can be used in a static way, but on the other hand for each FeatureCollection a instance of this class can be invoked. This might be more convenient, if there is more than one thing to do with the same feature collection.

Version:
$Rev: 1720 $ [sstein] - 22.Feb.2009 - modified to work in OpenJUMP
Author:
Ole Rahn

FH Osnabrück - University of Applied Sciences Osnabrück,
Project: PIROL (2005),
Subproject: Daten- und Wissensmanagement

Field Summary
protected  FeatureCollection fc
           
protected  java.util.List<Feature> featureList
           
protected static PersonalLogger logger
           
 
Constructor Summary
FeatureCollectionTools(FeatureCollection fc)
           
FeatureCollectionTools(java.util.List<Feature> fcl)
           
 
Method Summary
static PirolFeatureCollection addAttributesToFeatureCollection(FeatureCollection fc, AttributeInfo[] attributeInfos)
           
static PirolFeatureCollection addAttributesToFeatureCollection(FeatureCollection fc, AttributeInfo[] attributeInfos, boolean clearOriginalFeatureCollection)
          Adds multiple attributes to a FeatureCollection
static PirolFeatureCollection addAttributesToFeatureCollection(FeatureCollection fc, java.util.List<AttributeInfo> attributeInfos)
          Adds multiple attributes to a FeatureCollection
 PirolFeatureCollection addAttributesToFeatureCollection(java.util.List attributeInfos)
          Adds multiple attributes to the FeatureCollection
static PirolFeatureCollection addAttributeToFeatureCollection(FeatureCollection fc, AttributeInfo attrInfo)
           
static PirolFeatureCollection addAttributeToFeatureCollection(FeatureCollection fc, AttributeInfo attrInfo, boolean clearOldFeatureCollection)
           
static PirolFeatureCollection addAttributeToFeatureCollection(FeatureCollection fc, java.lang.String attr, AttributeType at, java.lang.Object defaultVal)
          Method to add a new attribute to an existing FeatureCollection.
static PirolFeatureCollection addAttributeToFeatureCollection(FeatureCollection fc, java.lang.String attr, AttributeType at, java.lang.Object defaultVal, boolean clearOldFeatureCollection)
          Method to add a new attribute to an existing FeatureCollection.
 PirolFeatureCollection addAttributeToFeatureCollection(java.lang.String attr, AttributeType at, java.lang.Object defaultVal)
           
static PirolFeatureCollection applyFormulaToFeatureCollection(FeatureCollection oldFc, AttributeInfo attrInfo, FormulaValue formula, boolean clearOldFeatureCollection)
          Method to apply a given formula to the given, new attribute of the given featureCollection
protected static boolean attributeExistsInSchema(FeatureSchema fs, java.lang.String attr)
           
static PirolFeatureCollection cloneFeatureCollection(FeatureCollection fc)
          deep copies a the FeatureSchema, the Features and their Geometries
static java.util.ArrayList<Feature> convertToPointFeature(Feature f, boolean accountForRings)
          Extracts all points from an input feature and returns them as list of point features.
static Feature copyFeature(Feature feat)
          "deep copys" the given Feature
static Feature copyFeatureAndSetFeatureSchema(Feature feat, FeatureSchema newFs)
          "deep copys" the given Feature and thereby sets the given feature schema
static void deleteFeatures(java.util.List<Feature> features, PlugInContext context)
          deletes the given features from the map.
static Feature[] FeatureCollection2FeatureArray(FeatureCollection fc)
          Converts a given FeatureCollection into an array of Feature, that can - by far - be faster iterated.
static Feature[] FeatureCollection2FeatureArray(java.util.List<Feature> features)
          Converts a given list of features into an array of Feature, that can - by far - be faster iterated.
static double getAritmeticMiddleForAttribute(Feature[] featArray, int attr)
           
static double getAritmeticMiddleForAttribute(Feature[] features, java.lang.String attr)
           
static double getAritmeticMiddleForAttribute(java.util.List<Feature> features, int attr)
           
static com.vividsolutions.jts.geom.Geometry getCenterOfMass(Feature[] features)
          Calculates the center of mass for the gives features' geometries.
static com.vividsolutions.jts.geom.Envelope getEnvelopeForFeatures(Feature[] features)
          Creates an envelope object for the features in the given array.
 Feature getFeature(int fid)
          gets the Feature with the given FID.
static Feature getFeatureFromCollection(Feature[] features, int fid)
          Get the feature with the specified ID from the array
static Feature getFeatureFromCollection(FeatureCollection features, int fid)
          Get the feature with the specified ID from the FeatureCollection
static Feature getFeatureFromCollection(java.util.List<Feature> features, int fid)
          Get the feature with the specified ID from the List
static java.lang.Object[] getMeanOrModeForAttributes(Feature[] features, java.lang.String[] attrs)
          Method to calculate means (or modes) for the attributes given.
static double[] getMinMaxAttributeValue(Feature[] featArray, FeatureSchema fs, java.lang.String attr)
           
static double[] getMinMaxAttributeValue(FeatureCollection features, java.lang.String attr)
           
static java.lang.Object getModusForAttribute(Feature[] features, int attr)
           
static java.lang.Object getModusForAttribute(Feature[] features, java.lang.String attr)
           
static int getNumOfDifferentAttributeValues(Feature[] features, int attr)
           
static int getNumOfDifferentAttributeValues(Feature[] features, java.lang.String attr)
           
static java.util.Set<java.lang.Object> getSetOfDifferentAttributeValues(Feature[] features, int attr)
           
static java.util.Set getSetOfDifferentAttributeValues(Feature[] features, java.lang.String attr)
           
static double getSumAttributeValue(Feature[] featArray, FeatureSchema fs, java.lang.String attr)
           
static java.lang.String getUniqueAttributeName(FeatureCollection fc, java.lang.String attr)
           
 java.lang.String getUniqueAttributeName(java.lang.String attr)
           
static java.util.HashMap<java.lang.Object,java.lang.Integer>[] getValueAppearancesCount(Feature[] features, int[] attrs)
          Counts the number of appearances of each value of the given attributes within the given features.
static boolean isAttributeTypeNumeric(AttributeType at)
           
static java.lang.Object resizeArray(java.lang.Object oldArray, int newSize)
          Reallocates an array with a new size, and copies the contents of the old array to the new array.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

fc

protected FeatureCollection fc

featureList

protected java.util.List<Feature> featureList

logger

protected static PersonalLogger logger
Constructor Detail

FeatureCollectionTools

public FeatureCollectionTools(FeatureCollection fc)

FeatureCollectionTools

public FeatureCollectionTools(java.util.List<Feature> fcl)
Method Detail

getFeature

public Feature getFeature(int fid)
gets the Feature with the given FID.

Parameters:
fid - FID to look for
Returns:
the feature

getFeatureFromCollection

public static Feature getFeatureFromCollection(java.util.List<Feature> features,
                                               int fid)
Get the feature with the specified ID from the List

Parameters:
features - array with Feature objects
fid - the feature ID we are looking for
Returns:
feature with specified FID if exists, else null

getFeatureFromCollection

public static Feature getFeatureFromCollection(Feature[] features,
                                               int fid)
Get the feature with the specified ID from the array

Parameters:
features - array with Feature objects
fid - the feature ID we are looking for
Returns:
feature with specified FID if exists, else null

cloneFeatureCollection

public static final PirolFeatureCollection cloneFeatureCollection(FeatureCollection fc)
deep copies a the FeatureSchema, the Features and their Geometries

Parameters:
fc - the FeatureCollection to copy
Returns:
the new copied FeatureCollection

getFeatureFromCollection

public static Feature getFeatureFromCollection(FeatureCollection features,
                                               int fid)
Get the feature with the specified ID from the FeatureCollection

Parameters:
features - array with Feature objects
fid - the feature ID we are looking for
Returns:
feature with specified FID if exists, else null

getAritmeticMiddleForAttribute

public static double getAritmeticMiddleForAttribute(Feature[] features,
                                                    java.lang.String attr)
Parameters:
features - list of features to calculate the mean for
attr - name of attribute to calculate the mean for
Returns:
the mean (double because a mean of integers will very likely be a double)

getMeanOrModeForAttributes

public static java.lang.Object[] getMeanOrModeForAttributes(Feature[] features,
                                                            java.lang.String[] attrs)
Method to calculate means (or modes) for the attributes given. If means or modes are calulated depends on the attribute type of each given given attribute. This method is hopefully faster, than calculation each mean (mode) in an extra loop, if there are more means (modes) to calculate than one...

Parameters:
features - list of features to calculate mean/modes for
attrs - array of attribute names to calculate mean/modes for
Returns:
array of objects, representing means (or modes) --> e.g. Double, Integer or String objects.

getEnvelopeForFeatures

public static com.vividsolutions.jts.geom.Envelope getEnvelopeForFeatures(Feature[] features)
Creates an envelope object for the features in the given array. This is an easy way to get an envelope for a subset of a layer's features.

Parameters:
features - array of Feature object to create an envelope for
Returns:
the envelope containing the given features

getAritmeticMiddleForAttribute

public static double getAritmeticMiddleForAttribute(java.util.List<Feature> features,
                                                    int attr)
Parameters:
features - list of features to calculate the mean for
attr - index of attribute to calculate the mean for
Returns:
the mean (double because a mean of integers will very likely be a double)

getAritmeticMiddleForAttribute

public static double getAritmeticMiddleForAttribute(Feature[] featArray,
                                                    int attr)
Parameters:
featArray - array of features to calculate the mean for
attr - index of attribute to calculate the mean for
Returns:
the mean (double because a mean of integers will very likely be a double)

getCenterOfMass

public static com.vividsolutions.jts.geom.Geometry getCenterOfMass(Feature[] features)
Calculates the center of mass for the gives features' geometries. It's like getCentroid(), but puts out one center of mass for N features instead of N centers for N features.

Parameters:
features - the features
Returns:
the point, representing the center of mass

getSetOfDifferentAttributeValues

public static java.util.Set getSetOfDifferentAttributeValues(Feature[] features,
                                                             java.lang.String attr)
Parameters:
features - list of features
attr - name of attribute
Returns:
number of differnt values in the given features attributes or -1 if an error occurs

getSetOfDifferentAttributeValues

public static java.util.Set<java.lang.Object> getSetOfDifferentAttributeValues(Feature[] features,
                                                                               int attr)
Parameters:
features - list of features
attr - index of attribute
Returns:
number of differnt values in the given features attributes or -1 if an error occurs

getNumOfDifferentAttributeValues

public static int getNumOfDifferentAttributeValues(Feature[] features,
                                                   java.lang.String attr)
Parameters:
features - list of features
attr - name of attribute
Returns:
number of differnt values in the given features attributes or -1 if an error occurs

getNumOfDifferentAttributeValues

public static int getNumOfDifferentAttributeValues(Feature[] features,
                                                   int attr)
Parameters:
features - list of features
attr - index of attribute
Returns:
number of differnt values in the given features attributes or -1 if an error occurs

getModusForAttribute

public static java.lang.Object getModusForAttribute(Feature[] features,
                                                    java.lang.String attr)
Parameters:
features - list of features to calculate the mode for
attr - name of attribute to calculate the mode for
Returns:
the mode

getValueAppearancesCount

public static final java.util.HashMap<java.lang.Object,java.lang.Integer>[] getValueAppearancesCount(Feature[] features,
                                                                                                     int[] attrs)
Counts the number of appearances of each value of the given attributes within the given features. (Somewhat like a histogram for each given attribute, but each histogram class is just a single value.)

Parameters:
features - array of Features to count value appearances for
attrs - array of attribute indices of attributes to count value appearances for
Returns:
Array of mappings of values to number of appearances

getModusForAttribute

public static java.lang.Object getModusForAttribute(Feature[] features,
                                                    int attr)
Parameters:
features - list of features to calculate the mode for
attr - index of attribute to calculate the mode for
Returns:
the mode

deleteFeatures

public static void deleteFeatures(java.util.List<Feature> features,
                                  PlugInContext context)
deletes the given features from the map. It thereby creates an EditTransaction that enables the user to undo the deletion.

Parameters:
features - features to be deleted
context - curr. PlugIn context

copyFeature

public static Feature copyFeature(Feature feat)
"deep copys" the given Feature

Parameters:
feat - the feature to be copied
Returns:
copy of the feature

copyFeatureAndSetFeatureSchema

public static Feature copyFeatureAndSetFeatureSchema(Feature feat,
                                                     FeatureSchema newFs)
"deep copys" the given Feature and thereby sets the given feature schema

Parameters:
feat - the feature to be copied
newFs - the new feature schema
Returns:
copy of the feature

getUniqueAttributeName

public java.lang.String getUniqueAttributeName(java.lang.String attr)

getUniqueAttributeName

public static java.lang.String getUniqueAttributeName(FeatureCollection fc,
                                                      java.lang.String attr)

attributeExistsInSchema

protected static boolean attributeExistsInSchema(FeatureSchema fs,
                                                 java.lang.String attr)

addAttributeToFeatureCollection

public PirolFeatureCollection addAttributeToFeatureCollection(java.lang.String attr,
                                                              AttributeType at,
                                                              java.lang.Object defaultVal)

isAttributeTypeNumeric

public static boolean isAttributeTypeNumeric(AttributeType at)

applyFormulaToFeatureCollection

public static PirolFeatureCollection applyFormulaToFeatureCollection(FeatureCollection oldFc,
                                                                     AttributeInfo attrInfo,
                                                                     FormulaValue formula,
                                                                     boolean clearOldFeatureCollection)
Method to apply a given formula to the given, new attribute of the given featureCollection

Parameters:
oldFc - old FeatureCollection that will be replaced by the new one
attrInfo - information for the new attribute
formula - the parsed formula
Returns:
FeatureCollection containing the new attribute

addAttributeToFeatureCollection

public static PirolFeatureCollection addAttributeToFeatureCollection(FeatureCollection fc,
                                                                     AttributeInfo attrInfo)

addAttributeToFeatureCollection

public static PirolFeatureCollection addAttributeToFeatureCollection(FeatureCollection fc,
                                                                     AttributeInfo attrInfo,
                                                                     boolean clearOldFeatureCollection)

addAttributeToFeatureCollection

public static PirolFeatureCollection addAttributeToFeatureCollection(FeatureCollection fc,
                                                                     java.lang.String attr,
                                                                     AttributeType at,
                                                                     java.lang.Object defaultVal,
                                                                     boolean clearOldFeatureCollection)
Method to add a new attribute to an existing FeatureCollection. Since there is no "legal" way to add an attribute to a FeatureCollection, this method creates (and returns) a new FeatureCollection with a new FeatureSchema to do this operation. If a layer is to be manipulated the new FeatureCollection has to be set as THE FeatureCollection for the layer...

Parameters:
fc - the old feature collection
attr - name of the new attribute
at - type of the new attribute
defaultVal - the initial value for the attribute, since we do not want NULL values in the attribute table
clearOldFeatureCollection - if true the old feature collection will be erased to save RAM
Returns:
new FeatureCollection with a new FeatureSchema including the new attribute

addAttributeToFeatureCollection

public static PirolFeatureCollection addAttributeToFeatureCollection(FeatureCollection fc,
                                                                     java.lang.String attr,
                                                                     AttributeType at,
                                                                     java.lang.Object defaultVal)
Method to add a new attribute to an existing FeatureCollection. Since there is no "legal" way to add an attribute to a FeatureCollection, this method creates (and returns) a new FeatureCollection with a new FeatureSchema to do this operation. If a layer is to be manipulated the new FeatureCollection has to be set as THE FeatureCollection for the layer...

Parameters:
fc - the old feature collection
attr - name of the new attribute
at - type of the new attribute
defaultVal - the initial value for the attribute, since we do not want NULL values in the attribute table
Returns:
new FeatureCollection with a new FeatureSchema including the new attribute

addAttributesToFeatureCollection

public PirolFeatureCollection addAttributesToFeatureCollection(java.util.List attributeInfos)
Adds multiple attributes to the FeatureCollection

Parameters:
attributeInfos - list containing the attributes (as AttributeInfo objects) to be added
Returns:
a new FeatureCollection containing the old and the new attributes
See Also:
AttributeInfo

addAttributesToFeatureCollection

public static PirolFeatureCollection addAttributesToFeatureCollection(FeatureCollection fc,
                                                                      java.util.List<AttributeInfo> attributeInfos)
Adds multiple attributes to a FeatureCollection

Parameters:
fc - the source feature collection
attributeInfos - list containing the attributes (as AttributeInfo objects) to be added
Returns:
a new FeatureCollection containing the old and the new attributes
See Also:
AttributeInfo

addAttributesToFeatureCollection

public static PirolFeatureCollection addAttributesToFeatureCollection(FeatureCollection fc,
                                                                      AttributeInfo[] attributeInfos)

addAttributesToFeatureCollection

public static PirolFeatureCollection addAttributesToFeatureCollection(FeatureCollection fc,
                                                                      AttributeInfo[] attributeInfos,
                                                                      boolean clearOriginalFeatureCollection)
Adds multiple attributes to a FeatureCollection

Parameters:
fc - the source feature collection
attributeInfos - array containing the attributes to be added
clearOriginalFeatureCollection - set true, if you want to save RAM by clearing the original FeatureCollection, false if you still want to use it.
Returns:
a new FeatureCollection containing the old and the new attributes

resizeArray

public static java.lang.Object resizeArray(java.lang.Object oldArray,
                                           int newSize)
Reallocates an array with a new size, and copies the contents of the old array to the new array.

Parameters:
oldArray - the old array, to be reallocated.
newSize - the new array size.
Returns:
A new array with the same contents.

getMinMaxAttributeValue

public static double[] getMinMaxAttributeValue(Feature[] featArray,
                                               FeatureSchema fs,
                                               java.lang.String attr)

getSumAttributeValue

public static double getSumAttributeValue(Feature[] featArray,
                                          FeatureSchema fs,
                                          java.lang.String attr)

getMinMaxAttributeValue

public static double[] getMinMaxAttributeValue(FeatureCollection features,
                                               java.lang.String attr)

FeatureCollection2FeatureArray

public static Feature[] FeatureCollection2FeatureArray(FeatureCollection fc)
Converts a given FeatureCollection into an array of Feature, that can - by far - be faster iterated.

Parameters:
fc - the feature Collection
Returns:
an array of the features of the feature collection

FeatureCollection2FeatureArray

public static Feature[] FeatureCollection2FeatureArray(java.util.List<Feature> features)
Converts a given list of features into an array of Feature, that can - by far - be faster iterated.

Parameters:
features - list of features
Returns:
an array of the features of the feature list

convertToPointFeature

public static java.util.ArrayList<Feature> convertToPointFeature(Feature f,
                                                                 boolean accountForRings)
Extracts all points from an input feature and returns them as list of point features. Note: for closed Geometry objects the start and end point are extracted - i.e. the points may be overlap.

Parameters:
f -
accountForRings - doesn't add a point for the last coordinate if the geometry is a ring (i.e. first point equals last point)
Returns:
list of point features