/**
* *****************************************************************************
* Copyright 2013 Johannes Mitlmeier
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
* ****************************************************************************
*/
package de.fub.agg2graph.ui.gui;
import de.fub.agg2graph.agg.AggContainer;
import de.fub.agg2graph.graph.RamerDouglasPeuckerFilter;
import de.fub.agg2graph.input.CleaningOptions;
import de.fub.agg2graph.input.GPSCleaner;
import de.fub.agg2graph.osm.ExporterFactory;
import de.fub.agg2graph.roadgen.RoadNetwork;
import de.fub.agg2graph.structs.GPSSegment;
import de.fub.agg2graph.ui.StepStorage;
import de.fub.agg2graph.ui.gui.RenderingOptions.RenderingType;
import de.fub.agg2graph.ui.gui.jmv.Layer;
import de.fub.agg2graph.ui.gui.jmv.TestUI;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
public class UIStepStorage extends StepStorage {
// data
public List<GPSSegment> inputSegmentList = new ArrayList<GPSSegment>();
public List<GPSSegment> cleanSegmentList = new ArrayList<GPSSegment>();
// layers
public Layer rawLayer;
public Layer cleanLayer;
public Layer aggLayer;
public Layer intersectionLayer;
public Layer roadLayer;
private final TestUI ui;
public int levelReached = 1;
public UIStepStorage(TestUI ui) {
setGpsCleaner(new GPSCleaner());
setCleaningRamerDouglasPeuckerFilter(new RamerDouglasPeuckerFilter(5));
setExportRamerDouglasPeuckerFilter(new RamerDouglasPeuckerFilter(15));
setRoadNetwork(new RoadNetwork());
setExporter(ExporterFactory.getObject());
this.ui = ui;
LayerManager lm = ui.getLayerManager();
// init layers
RenderingOptions x = new RenderingOptions();
x.setColor(new Color(97, 123, 228)); // blue
x.setRenderingType(RenderingType.ALL);
x.setzIndex(-1);
x.setOpacity(1);
rawLayer = new Layer("input", "Raw gps data", x);
lm.addLayerToPanel(rawLayer, new RenderingPanel(ui));
lm.addLayerToPanel(rawLayer, ui.getMainPanel());
x = new RenderingOptions();
x.setColor(new Color(39, 172, 88)); // green
x.setRenderingType(RenderingType.ALL);
x.setzIndex(0);
x.setOpacity(1);
cleanLayer = new Layer("clean", "Clean gps data", x);
lm.addLayerToPanel(cleanLayer, new RenderingPanel(ui));
lm.addLayerToPanel(cleanLayer, ui.getMainPanel());
x = new RenderingOptions();
x.setColor(new Color(232, 23, 79)); // red
x.setzIndex(1);
x.setOpacity(0.7);
Layer matchingLayer = new Layer("matching", "Matching", x);
lm.addLayerToPanel(matchingLayer, new RenderingPanel(ui));
lm.addLayerToPanel(matchingLayer, ui.getMainPanel());
x = new RenderingOptions();
x.setColor(new Color(240, 225, 17)); // yellow/orange
x.setzIndex(2);
x.setOpacity(0.7);
Layer mergingLayer = new Layer("merging", "Merging", x);
lm.addLayerToPanel(mergingLayer, new RenderingPanel(ui));
lm.addLayerToPanel(mergingLayer, ui.getMainPanel());
x = new RenderingOptions();
x.setColor(new Color(38, 36, 5)); // black
x.setRenderingType(RenderingType.ALL);
x.setzIndex(3);
x.setOpacity(1);
aggLayer = new Layer("agg", "Aggregation", x);
lm.addLayerToPanel(aggLayer, new RenderingPanel(ui));
lm.addLayerToPanel(aggLayer, ui.getMainPanel());
x = new RenderingOptions();
x.setColor(new Color(137, 0, 255)); // dark blue, semi transparent!
x.setRenderingType(RenderingType.POINTS);
x.setzIndex(4);
x.setOpacity(0.5);
x.setStrokeBaseWidthFactor(25);
intersectionLayer = new Layer("intersections", "Intersections", x);
lm.addLayerToPanel(intersectionLayer, new RenderingPanel(ui));
lm.addLayerToPanel(intersectionLayer, ui.getMainPanel());
x = new RenderingOptions();
x.setRenderingType(RenderingType.ALL);
x.setzIndex(5);
x.setOpacity(1);
x.setStrokeBaseWidthFactor(1.5f);
roadLayer = new Layer("road", "Roads", x);
lm.addLayerToPanel(roadLayer, new RenderingPanel(ui));
lm.addLayerToPanel(roadLayer, ui.getMainPanel());
// some initial values
CleaningOptions o = getGpsCleaner().getCleaningOptions();
o.filterBySegmentLength = true;
o.minSegmentLength = 1;
o.maxSegmentLength = 100;
o.filterByEdgeLength = true;
o.minEdgeLength = 0.3;
o.maxEdgeLength = 750;
o.filterZigzag = true;
o.maxZigzagAngle = 30;
o.filterFakeCircle = true;
o.maxFakeCircleAngle = 50;
o.filterOutliers = false;
o.maxNumOutliers = 2;
}
@Override
public void setAggContainer(AggContainer aggContainer) {
this.aggContainer = aggContainer;
aggLayer.clear();
aggLayer.addObject(aggContainer);
}
public void clear(int level) {
if (level <= 3 && levelReached >= 3) {
if (roadNetwork != null) {
roadNetwork.clear();
roadLayer.clear();
intersectionLayer.clear();
}
}
if (level <= 2 && levelReached >= 2) {
if (aggContainer != null) {
aggContainer.clear();
}
// debug stuff
ui.getLayerManager().getLayer("matching").clear();
ui.getLayerManager().getLayer("merging").clear();
}
if (level <= 1 && levelReached >= 1) {
cleanLayer.clear();
}
if (level <= 0 && levelReached >= 0) {
rawLayer.clear();
ui.dataBoundingBox = null;
}
}
}