Statistics
| Revision:

gvsig-3d / 2.1 / branches / extrusion / org.gvsig.view3d.swing / org.gvsig.view3d.swing.impl / src / main / java / org / gvsig / view3d / swing / impl / data / DefaultElevationModel.java @ 657

History | View | Annotate | Download (4.45 KB)

1
package org.gvsig.view3d.swing.impl.data;
2

    
3
import org.slf4j.Logger;
4
import org.slf4j.LoggerFactory;
5
import org.w3c.dom.Element;
6

    
7
import org.gvsig.fmap.mapcontext.layers.FLayer;
8
import org.gvsig.view3d.lib.api.properties.E3DLayerLoadingModes;
9

    
10
import gov.nasa.worldwind.WorldWind;
11
import gov.nasa.worldwind.avlist.AVKey;
12
import gov.nasa.worldwind.avlist.AVList;
13
import gov.nasa.worldwind.data.RasterServer;
14
import gov.nasa.worldwind.retrieve.RetrievalPostProcessor;
15
import gov.nasa.worldwind.retrieve.Retriever;
16
import gov.nasa.worldwind.retrieve.RetrieverFactory;
17
import gov.nasa.worldwind.terrain.BasicElevationModel;
18
import gov.nasa.worldwind.util.WWUtil;
19

    
20
/**
21
 * 
22
 * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
23
 *
24
 */
25
public class DefaultElevationModel extends BasicElevationModel {
26

    
27
    private static final Logger LOG = LoggerFactory
28
        .getLogger(DefaultElevationModel.class);
29
    
30
    /**
31
     * 
32
     * @param params
33
     */
34
    public DefaultElevationModel(AVList params) {
35
        super(params);
36

    
37
        this.createRasterServer(params);
38
    }
39
    
40
    /**
41
     * 
42
     * @param domElement
43
     * @param params
44
     */
45
    public DefaultElevationModel(Element domElement, AVList params) {
46
        super(domElement, params);
47

    
48
        this.createRasterServer(params != null ? params : (AVList) this
49
            .getValue(AVKey.CONSTRUCTION_PARAMETERS));
50
    }
51

    
52
    private void createRasterServer(AVList params) {
53

    
54
        if (params == null) {
55
            LOG.error("Can not create raster server, parameters is null");
56
            throw new IllegalArgumentException();
57
        }
58

    
59
        if (params.getValue(AVKey.FILE_STORE) == null) {
60
            setDataFileStore(WorldWind.getDataFileStore());
61
        }
62
        
63
        String datasetName = params.getStringValue(AVKey.DATASET_NAME);
64
        if (WWUtil.isEmpty(datasetName)) {
65
            LOG.error(
66
                "Can not create raster server, missing required parameter: {}",
67
                AVKey.DATASET_NAME);
68
            throw new IllegalArgumentException();
69
        }
70

    
71
        String dataCacheName = params.getStringValue(AVKey.DATA_CACHE_NAME);
72
        if (WWUtil.isEmpty(dataCacheName)) {
73
            LOG.error(
74
                "Can not create raster server, missing required parameter: {}",
75
                AVKey.DATA_CACHE_NAME);
76
            throw new IllegalArgumentException();
77
        }
78

    
79
//        MapControl3D mapControl3D =
80
//            (MapControl3D) params.getValue(DefaultMapControl3D.GVSIG_MAPCONTROL3D);
81
//
82
//        if (mapControl3D == null) {
83
//            LOG.error(
84
//                "Can not create raster server, missing required parameter: {}",
85
//                DefaultMapControl3D.GVSIG_MAPCONTROL3D);
86
//            throw new IllegalArgumentException();
87
//        }
88

    
89
        FLayer layer =
90
            (FLayer) params.getValue(E3DLayerLoadingModes.GVSIG_LAYER);
91

    
92
        if (layer == null) {
93
            LOG.error(
94
                "Can not create raster server, missing required parameter: {}",
95
                "GVSIG_LAYER");
96
            throw new IllegalArgumentException();
97
        }
98

    
99
        final AVList rasterServerParams = params.copy();
100

    
101
        RetrieverFactory retrieverFactory = new RetrieverFactory() {
102

    
103
            final protected RasterServer rasterServer =
104
                new DefaultRasterServer(rasterServerParams);
105

    
106
            public Retriever createRetriever(AVList tileParams,
107
                RetrievalPostProcessor postProcessor) {
108
                 DefaultRasterServerRetriever retriever =
109
                    new DefaultRasterServerRetriever(tileParams, rasterServer,
110
                        postProcessor);
111

    
112
                // copy only values that do not exist in destination AVList
113
                // from rasterServerParams (source) to retriever (destination)
114
                String[] keysToCopy =
115
                    new String[] { AVKey.DATASET_NAME, AVKey.DISPLAY_NAME,
116
                        AVKey.FILE_STORE, AVKey.BYTE_ORDER, AVKey.IMAGE_FORMAT,
117
                        AVKey.DATA_TYPE, AVKey.FORMAT_SUFFIX,
118
                        AVKey.MISSING_DATA_SIGNAL,
119
                        AVKey.MISSING_DATA_REPLACEMENT, AVKey.ELEVATION_MIN,
120
                        AVKey.ELEVATION_MAX, };
121

    
122
                WWUtil.copyValues(rasterServerParams, retriever, keysToCopy,
123
                    false);
124

    
125
                return retriever;
126
            }
127
        };
128

    
129
        params.setValue(AVKey.RETRIEVER_FACTORY_LOCAL, retrieverFactory);
130
        this.setValue(AVKey.RETRIEVER_FACTORY_LOCAL, retrieverFactory);
131
    }
132
}