Statistics
| Revision:

gvsig-3d / 2.1 / trunk / org.gvsig.view3d / org.gvsig.view3d.vector / org.gvsig.view3d.vector.lib / org.gvsig.view3d.vector.lib.impl / src / main / java / org / gvsig / view3d / vector / lib / impl / vector / DefeaultVectorPointRenderableLayer.java @ 761

History | View | Annotate | Download (3.2 KB)

1
package org.gvsig.view3d.vector.lib.impl.vector;
2

    
3
import java.util.ArrayList;
4
import java.util.List;
5

    
6
import org.gvsig.fmap.dal.exception.DataException;
7
import org.gvsig.fmap.dal.feature.Feature;
8
import org.gvsig.fmap.dal.feature.FeatureQuery;
9
import org.gvsig.fmap.dal.feature.FeatureStore;
10
import org.gvsig.fmap.dal.feature.FeatureType;
11
import org.gvsig.fmap.geom.Geometry;
12
import org.gvsig.fmap.geom.Geometry.TYPES;
13
import org.gvsig.fmap.geom.aggregate.MultiPoint;
14
import org.gvsig.fmap.geom.primitive.Point;
15
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
16
import org.gvsig.view3d.vector.lib.api.VectorElevationMode;
17
import org.gvsig.view3d.vector.lib.api.VectorLoaderParameters;
18
import org.gvsig.view3d.vector.lib.impl.AbstractPointRenderableLayer;
19

    
20
import gov.nasa.worldwind.geom.Position;
21
import gov.nasa.worldwind.render.PointPlacemark;
22
import gov.nasa.worldwind.render.Renderable;
23

    
24
public class DefeaultVectorPointRenderableLayer extends AbstractPointRenderableLayer {
25

    
26
    public DefeaultVectorPointRenderableLayer(VectorLoaderParameters parameters, FeatureStore featureStore,
27
        IVectorLegend legend) {
28
        super(parameters, featureStore, legend);
29
    }
30

    
31
    @Override
32
    protected List<Renderable> getRenderable(Feature feature) {
33
        Geometry geom = feature.getDefaultGeometry();
34
        List<Renderable> renderables = new ArrayList<>();
35
        if (geom.getGeometryType().isTypeOf(TYPES.MULTIPOINT)) {
36
            MultiPoint multiPoint = (MultiPoint) geom;
37
            for (int i = 0; i < multiPoint.getPrimitivesNumber(); i++) {
38
                renderables.add(getRenderable(multiPoint.getPointAt(i)));
39
            }
40
        } else {
41
            renderables.add(getRenderable((Point) geom));
42
        }
43
        return renderables;
44
    }
45

    
46
    private PointPlacemark getRenderable(Point point) {
47
        boolean hasZ = point.getDimension() > 2;
48
        double h = 0.0;
49
        double y = point.getY();
50
        double x = point.getX();
51
        
52
        if(VectorElevationMode.CLAMP_TO_GROUND.equals(parameters.getVectorElevationMode())) {
53
            hasZ = false;
54
        } else {
55
            if(VectorElevationMode.RELATIVE_TO_GROUND.equals(parameters.getVectorElevationMode())) {
56
                hasZ = false;
57
            }
58
            if (parameters.getConstantHeight() != null) {
59
                h = parameters.getConstantHeight();
60
            }
61
        }
62
        
63
        PointPlacemark marker;
64
        if (hasZ) {
65
            double z = point.getCoordinateAt(2);
66
            marker = new PointPlacemark(Position.fromDegrees(y, x, z + h));
67
        } else {
68
            Position position = Position.fromDegrees(y, x, h);
69
            marker = new PointPlacemark(position);
70
        }
71
        marker.setAltitudeMode(getAltitudeMode(parameters.getVectorElevationMode()));
72
        marker.setAttributes(this.markAttributes);
73
        return marker;
74
    }
75

    
76
    @Override
77
    protected FeatureQuery getFeatureQuery() throws DataException {
78
        FeatureType featureType = featureStore.getDefaultFeatureType();
79
        String geomAtt = featureType.getDefaultGeometryAttributeName();
80
        FeatureQuery featureQuery = featureStore.createFeatureQuery();
81
        featureQuery.addAttributeName(geomAtt);
82
        return featureQuery;
83
    }
84

    
85
}