This tutorial assumes that you have looked over the Analysis Framework Developer's Guide and have followed the MAEviz development environment tutorial for setting up a development environment. If not, please look at those two documents because this tutorial assumes you have setup your MAEviz development environment and are ready to create a new analysis plug-in so you can begin extending MAEviz.
The analysis we are going to perform is to check if a building is not on soft soil (0) or on soft soil (1). For simplicity, the analysis will randomly generate this number. Below you will find the steps to create this new analysis.
The first step is to create a new plug-in to contain our new analysis. To do this, do the following:
Now that we have a new plug-in, we can move on to adding the required plug-ins for our new project.
We will need to add a few required plug-ins. To do this, do the following:
Your Dependency list should look like the one in the screenshot below:
The next steps are to add a New Analysis, a Task, and a result schema that tells the analysis how to create our result.
To create a new analysis, open the Manifest.MF if it isn't already open and do the following
Your BuildingSoilAnalysis.xml file should contain the following xml statements:
<analysis-description id ="ncsa.maeviz.building.example.analysis.buildingSoilAnalysis"> <analysis-type type="simpleIteration"> <property name="iteratingDatasetKey" value="buildings"> </property> </analysis-type> <groups> <group-name>Required</group-name> <group-name>Advanced</group-name> </groups> <!-- Analysis Inputs --> <!-- the result name must be prefixed with the tag of the analysis, in this case toxicCloudAnalysis --> <parameter format="resultName" phylum="string" cardinality="single" key="buildingSoilAnalysis.resultName" friendly-name="Result Name"/> <parameter phylum="dataset" cardinality="single" key="buildings" friendly-name="Buildings"> <types> <type>buildingv4</type> <type>buildingv5</type> </types> </parameter> <!-- Analysis Outputs --> <output friendly-name="Building Soil Results" key="buildingSoilAnalysis" phylum="dataset" format="shapefile" geom="buildings" guids="buildings"> <property name="buildings" type="base-dataset-key" value="buildings"/> <property name="schema" type="schema" value="ncsa.maeviz.building.example.schemas.buildingSoilResults.v1.0"/> </output> </analysis-description> |
The next step is to create a new analysis task. This is the Java code that will be executed by the new analysis to produce our building soil analysis output. To create a new task, do the following:
It is critical that the tag for the Task be identical to the tag for the analysis since this is how MAEviz determines which task goes with which analysis. After entering the text for the class field, if you click on the class, a source file will be generated for you. Where it says Superclass locate the class called SimpleFeatureTask and click Finish. You should see a wizard similar to the one below:
Now that you have your class file, add the missing lines of code from the example below:
@Override protected void handleFeature( IProgressMonitor monitor ) throws ScriptExecutionException{ resultMap.put( "soiltype", isSoftSoil() ); } /** * Generate a number between 0 and 5 (exclusive) * 0 - Soil Type A * 1 - Soil Type B * 2 - Soil Type C * 3 - Soil Type D * 4 - Soil Type E * @return Soil Type */ private int isSoftSoil() { Random rand = new Random(); return rand.nextInt( 5 ); } |
The next step is to create a result type schema to specify the new fields created by our analysis. This tutorial will not go into detail about the schema file since it is behind the scope of this tutorial.
For the schema file buildingSoilResults_1.0.xsd, please enter the following information:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:gml="http://www.opengis.net/gml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ionicsoft.com/wfs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:iwfs="http://www.ionicsoft.com/wfs" targetNamespaceOptionnal="true" xmlns="http://www.ionicsoft.com/wfs" elementFormDefault="qualified"> <xsd:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/2.1.2/feature.xsd"/> <xsd:element name="building-soil-analysis" substitutionGroup="gml:_Feature" type="iwfs:building-soil-analysis"/> <xsd:complexType name="building-soil-analysis"> <xsd:complexContent> <xsd:extension base="gml:AbstractFeatureType"> <xsd:sequence> <xsd:element name="maeviz.soiltype" minOccurs="0" nillable="true" type="xsd:integer"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:schema> |
You can download the example plug-in that contains everything in the tutorial by doing the following: