Statistics
| Revision:

svn-gvsig-desktop / tags / v1_1_2_Build_1044 / prototypes / VectorialAvanzado / extensions / extGraph / src-test / com / iver / cit / gvsig / graphtests / TestLoader.java @ 20099

History | View | Annotate | Download (6.47 KB)

1
package com.iver.cit.gvsig.graphtests;
2

    
3

    
4
import java.io.File;
5
import java.sql.Driver;
6
import java.sql.DriverManager;
7
import java.util.List;
8

    
9
import junit.framework.TestCase;
10

    
11
import org.cresques.cts.IProjection;
12

    
13
import com.hardcode.driverManager.DriverLoadException;
14
import com.hardcode.driverManager.DriverValidation;
15
import com.hardcode.gdbms.engine.data.DataSource;
16
import com.hardcode.gdbms.engine.data.DataSourceFactory;
17
import com.hardcode.gdbms.engine.data.NoSuchTableException;
18
import com.hardcode.gdbms.engine.data.driver.DBDriver;
19
import com.hardcode.gdbms.engine.data.driver.DriverException;
20
import com.hardcode.gdbms.engine.data.driver.FileDriver;
21
import com.hardcode.gdbms.engine.data.driver.ObjectDriver;
22
import com.iver.cit.gvsig.fmap.crs.CRSFactory;
23
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
24
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
25
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
26
import com.iver.cit.gvsig.graph.core.EdgeWeightLabeller;
27
import com.iver.cit.gvsig.graph.core.FNode;
28
import com.iver.cit.gvsig.graph.core.GraphException;
29
import com.iver.cit.gvsig.graph.core.IGraph;
30
import com.iver.cit.gvsig.graph.core.JungGraph;
31
import com.iver.cit.gvsig.graph.core.Network;
32
import com.iver.cit.gvsig.graph.core.loaders.NetworkLoader;
33
import com.iver.cit.gvsig.graph.core.loaders.NetworkRedLoader;
34
import com.iver.cit.gvsig.graph.solvers.Route;
35
import com.iver.cit.gvsig.graph.solvers.ShortestPathSolverAStar;
36
import com.iver.cit.gvsig.graph.solvers.ShortestPathSolverDijkstra;
37

    
38
import edu.uci.ics.jung.algorithms.shortestpath.DijkstraDistance;
39
import edu.uci.ics.jung.algorithms.shortestpath.DijkstraShortestPath;
40
import edu.uci.ics.jung.graph.ArchetypeVertex;
41
import edu.uci.ics.jung.graph.Graph;
42

    
43
public class TestLoader extends TestCase {
44
        DataSourceFactory dsf;
45

    
46
        FLyrVect lyr;
47

    
48
        public void testLoadRedNetwork() {
49
                NetworkRedLoader netLoader = new NetworkRedLoader();
50
                IGraph g = netLoader.loadNetwork();
51

    
52
                // Probamos la algoritmia: distancia entre nodo 1 y nodo 1000
53
                Network net = new Network();
54
                ShortestPathSolverDijkstra solver = new ShortestPathSolverDijkstra();
55
                net.setLayer(lyr);
56
                net.setGraph(g);
57
                solver.setNetwork(net);
58
                
59
                ShortestPathSolverAStar solverAstar = new ShortestPathSolverAStar();
60
                solverAstar.setNetwork(net);
61
                
62
                try {
63

    
64
                        // Primer punto
65
                        net.addFlag(433647.09370, 4488029, 10);
66

    
67
                        // Segundo punto
68
                        net.addFlag(437290.96875, 4481547, 10);
69
                        long t1 = System.currentTimeMillis();
70
                        Route resul;
71
                        solver.setFielStreetName("Nombre");
72
                        resul = solver.calculateRoute();
73
                        long t2 = System.currentTimeMillis();
74

    
75
                        // assertEquals(dist.doubleValue(), 8887, 0);
76

    
77
                        System.out.println("fjp dist =" + resul.getLength()
78
                                        + " meters. msecs: " + (t2 - t1));
79

    
80
                        t1 = System.currentTimeMillis();
81
                        Route resul2;
82
                        solverAstar.setFielStreetName("Nombre");
83
                        resul2 = solverAstar.calculateRoute();
84
                        t2 = System.currentTimeMillis();
85

    
86
                        System.out.println("ASTAR dist =" + resul2.getLength()
87
                                        + " meters. msecs: " + (t2 - t1));
88
                        
89
                        assertEquals(resul.getLength(), resul2.getLength(), 0.0);
90
                        
91
                        JungGraph jG = new JungGraph(g);
92
                        // Probamos la algoritmia: distancia entre nodo 1 y nodo 1000
93
                        DijkstraShortestPath distCalculator = new DijkstraShortestPath(jG,
94
                                        new EdgeWeightLabeller());
95
                        FNode vOrig = jG.getVertexByID(1);
96
                        FNode vEnd = jG.getVertexByID(1000);
97
                        t1 = System.currentTimeMillis();
98
                        Number dist = distCalculator.getDistance(vOrig, vEnd);
99
                        t2 = System.currentTimeMillis();
100

    
101
                        // assertEquals(dist.doubleValue(), 8887, 0);
102

    
103
                        System.out
104
                                        .println("dist =" + dist + " meters. msecs: " + (t2 - t1));
105

    
106
                        System.out.println(vOrig + " - " + vEnd);
107
                        System.out.println(vOrig.getX() + ", " + vOrig.getY() + " - "
108
                                        + vEnd.getX() + ", " + vEnd.getY());
109
                        
110
                        assertEquals(resul.getLength(), dist.doubleValue(), 0.4);
111

    
112
                } catch (GraphException e) {
113
                        // TODO Auto-generated catch block
114
                        e.printStackTrace();
115
                }
116

    
117
        }
118

    
119
        /*
120
         * Test method for
121
         * 'com.iver.cit.gvsig.graph.core.NetworkLoader.loadNetwork()'
122
         */
123
//        public void testLoadNetwork() {
124
//                // if (true) return;
125
//                NetworkLoader netLoader = new NetworkLoader(true);
126
//
127
//                DataSource dsNodes;
128
//                try {
129
//                        dsNodes = dsf.createRandomDataSource("nodes",
130
//                                        DataSourceFactory.MANUAL_OPENING);
131
//
132
//                        DataSource dsEdges = dsf.createRandomDataSource("edges",
133
//                                        DataSourceFactory.MANUAL_OPENING);
134
//
135
//                        SelectableDataSource sdsNodes = new SelectableDataSource(dsNodes);
136
//                        SelectableDataSource sdsEdges = new SelectableDataSource(dsEdges);
137
//
138
//                        netLoader.setNodeReader(sdsNodes);
139
//                        netLoader.setEdgeReader(sdsEdges);
140
//
141
//                        Graph g = netLoader.loadJungNetwork();
142
//
143
//                        System.out.println("Num nodos=" + g.numVertices() + " numEdges = "
144
//                                        + g.numEdges());
145
//
146
//                        // Probamos la algoritmia: distancia entre nodo 1 y nodo 1000
147
//                        DijkstraDistance distCalculator = new DijkstraDistance(g,
148
//                                        new EdgeWeightLabeller());
149
//                        ArchetypeVertex vOrig = netLoader.getIndexer().getVertex(1);
150
//                        ArchetypeVertex vEnd = netLoader.getIndexer().getVertex(1000);
151
//                        long t1 = System.currentTimeMillis();
152
//                        Number dist = distCalculator.getDistance(vOrig, vEnd);
153
//                        long t2 = System.currentTimeMillis();
154
//
155
//                        // assertEquals(dist.doubleValue(), 8887, 0);
156
//
157
//                        System.out
158
//                                        .println("dist =" + dist + " meters. msecs: " + (t2 - t1));
159
//                        System.out.println(vOrig + " - " + vEnd);
160
//                        System.out.println(vOrig.getUserDatum("X") + ", "
161
//                                        + vOrig.getUserDatum("Y") + " - " + vEnd.getUserDatum("X")
162
//                                        + ", " + vEnd.getUserDatum("Y"));
163
//
164
//                } catch (DriverLoadException e) {
165
//                        // TODO Auto-generated catch block
166
//                        e.printStackTrace();
167
//                } catch (NoSuchTableException e) {
168
//                        // TODO Auto-generated catch block
169
//                        e.printStackTrace();
170
//                } catch (DriverException e) {
171
//                        // TODO Auto-generated catch block
172
//                        e.printStackTrace();
173
//                }
174
//
175
//        }
176

    
177
        protected void setUp() throws Exception {
178
                // Setup de los drivers
179
                LayerFactory
180
                                .setDriversPath("../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers");
181

    
182
                // Setup del factory de DataSources
183
                dsf = LayerFactory.getDataSourceFactory();
184

    
185
                // Setup de las tablas
186
                dsf.addFileDataSource("gdbms dbf driver", "nodes", "c:/nodes.dbf");
187
                dsf.addFileDataSource("gdbms dbf driver", "edges", "c:/edges.dbf");
188

    
189
                IProjection prj = CRSFactory.getCRS("EPSG:23030");
190
                File shpFile = new File("c:/ejes.shp");
191
                lyr = (FLyrVect) LayerFactory.createLayer("Ejes", "gvSIG shp driver",
192
                                shpFile, prj);
193

    
194
        }
195

    
196
        protected void tearDown() throws Exception {
197
                // TODO Auto-generated method stub
198
                super.tearDown();
199
        }
200

    
201
}