Revision 11296 branches/v10/extensions/extGraph_predes/src/com/iver/cit/gvsig/graph/core/loaders/NetworkLoader.java
NetworkLoader.java | ||
---|---|---|
77 | 77 |
import edu.uci.ics.jung.visualization.SettableVertexLocationFunction; |
78 | 78 |
|
79 | 79 |
public class NetworkLoader implements INetworkLoader { |
80 |
|
|
80 |
|
|
81 | 81 |
private String fieldNodeId = "NODEID"; |
82 | 82 |
private String fieldNodeX = "X"; |
83 | 83 |
private String fieldNodeY = "Y"; |
... | ... | |
92 | 92 |
|
93 | 93 |
private SelectableDataSource nodeReader; |
94 | 94 |
private SelectableDataSource edgeReader; |
95 |
|
|
95 |
|
|
96 | 96 |
private Indexer indexer; |
97 |
|
|
97 |
|
|
98 | 98 |
private boolean bUseCostField; |
99 |
|
|
99 |
|
|
100 | 100 |
/** |
101 | 101 |
* The user data key used to retrieve the vertex locations (if any) defined by this class. |
102 | 102 |
*/ |
103 | 103 |
public static final String LOCATIONS = "jung.io.GvSIGNetReader.LOCATIONS"; |
104 |
|
|
104 |
|
|
105 | 105 |
protected SettableVertexLocationFunction v_locations = new DefaultSettableVertexLocationFunction(); |
106 | 106 |
|
107 | 107 |
|
... | ... | |
110 | 110 |
* private String fieldNodeId = "NODEID"; |
111 | 111 |
* fieldNodeX = "X"; |
112 | 112 |
* fieldNodeY = "Y"; |
113 |
*
|
|
113 |
* |
|
114 | 114 |
* fieldArcId = "NODEID"; |
115 | 115 |
* fieldDirection = "X"; |
116 | 116 |
* fieldNodeOrig = "Y"; |
117 | 117 |
* fieldNodeEnd = "NODEORIGIN"; |
118 | 118 |
* fieldType = "NODEEND"; |
119 | 119 |
* fieldDist = "DIST"; |
120 |
*
|
|
120 |
* |
|
121 | 121 |
* If you need to change any, use the correspondant "setFieldXXXX" |
122 |
* BEFORE calling loadNetwork. And remember to set nodeReader and
|
|
122 |
* BEFORE calling loadNetwork. And remember to set nodeReader and |
|
123 | 123 |
* edgeReader also. |
124 | 124 |
*/ |
125 | 125 |
public NetworkLoader(boolean bUseCostField) { |
126 | 126 |
this.bUseCostField = bUseCostField; |
127 | 127 |
} |
128 | 128 |
|
129 |
|
|
129 |
|
|
130 | 130 |
public String getFieldArcId() { |
131 | 131 |
return fieldArcId; |
132 | 132 |
} |
... | ... | |
235 | 235 |
DataSource dsNodes; |
236 | 236 |
try { |
237 | 237 |
dsNodes = dsf.createRandomDataSource("nodes", |
238 |
DataSourceFactory.MANUAL_OPENING); |
|
239 |
|
|
238 |
DataSourceFactory.AUTOMATIC_OPENING);//MANUAL_OPENING);
|
|
239 |
|
|
240 | 240 |
DataSource dsEdges = dsf.createRandomDataSource("edges", |
241 |
DataSourceFactory.MANUAL_OPENING); |
|
242 |
|
|
243 |
|
|
241 |
DataSourceFactory.AUTOMATIC_OPENING);//MANUAL_OPENING);
|
|
242 |
|
|
243 |
|
|
244 | 244 |
SelectableDataSource sdsNodes = new SelectableDataSource(dsNodes); |
245 | 245 |
SelectableDataSource sdsEdges = new SelectableDataSource(dsEdges); |
246 |
|
|
246 |
|
|
247 | 247 |
netLoader.setNodeReader(sdsNodes); |
248 | 248 |
netLoader.setEdgeReader(sdsEdges); |
249 |
|
|
250 |
|
|
249 |
|
|
250 |
|
|
251 | 251 |
Graph g = netLoader.loadJungNetwork(); |
252 |
|
|
252 |
|
|
253 | 253 |
System.out.println("Num nodos=" + g.numVertices() + " numEdges = " + g.numEdges()); |
254 |
|
|
254 |
|
|
255 | 255 |
// Probamos la algoritmia: distancia entre nodo 1 y nodo 1000 |
256 | 256 |
DijkstraDistance distCalculator = new DijkstraDistance(g, new EdgeWeightLabeller()); |
257 | 257 |
ArchetypeVertex vOrig = netLoader.indexer.getVertex(1); |
... | ... | |
259 | 259 |
long t1 = System.currentTimeMillis(); |
260 | 260 |
Number dist = distCalculator.getDistance(vOrig, vEnd); |
261 | 261 |
long t2 = System.currentTimeMillis(); |
262 |
|
|
263 |
|
|
262 |
|
|
263 |
|
|
264 | 264 |
System.out.println("dist =" + dist + " meters. msecs: " + (t2-t1)); |
265 | 265 |
System.out.println(vOrig + " - " + vEnd); |
266 | 266 |
System.out.println(vOrig.getUserDatum("X") + ", " + vOrig.getUserDatum("Y") |
267 | 267 |
+ " - " + vEnd.getUserDatum("X") + ", " + vEnd.getUserDatum("Y")); |
268 |
|
|
268 |
|
|
269 | 269 |
} catch (DriverLoadException e) { |
270 | 270 |
// TODO Auto-generated catch block |
271 | 271 |
e.printStackTrace(); |
... | ... | |
291 | 291 |
int fieldIndexNodeEnd = edgeReader.getFieldIndexByName(fieldNodeEnd); |
292 | 292 |
int fieldIndexType = edgeReader.getFieldIndexByName(fieldType); |
293 | 293 |
int fieldIndexDist = edgeReader.getFieldIndexByName(fieldDist); |
294 |
|
|
295 |
|
|
294 |
|
|
295 |
|
|
296 | 296 |
SparseGraph g = new SparseGraph(); |
297 | 297 |
// g.getEdgeConstraints().clear(); |
298 | 298 |
long t1 = System.currentTimeMillis(); |
299 |
|
|
299 |
|
|
300 | 300 |
// Mirar NumberEdgeVAlue e Indexer |
301 | 301 |
for (int i=0; i < nodeReader.getRowCount(); i++) |
302 | 302 |
{ |
... | ... | |
308 | 308 |
v.addUserDatum("X", x, UserData.CLONE); |
309 | 309 |
v.addUserDatum("Y", y, UserData.CLONE); |
310 | 310 |
v_locations.setLocation(v, new Point2D.Double(x.doubleValue(),y.doubleValue())); |
311 |
g.addVertex(v);
|
|
311 |
g.addVertex(v); |
|
312 | 312 |
} |
313 | 313 |
indexer = Indexer.getIndexer(g); |
314 |
|
|
314 |
|
|
315 | 315 |
for (int i=0; i < edgeReader.getRowCount(); i++) |
316 | 316 |
{ |
317 | 317 |
NumericValue arcID = (NumericValue) edgeReader.getFieldValue(i, fieldIndexArcID); |
... | ... | |
320 | 320 |
NumericValue nodeEnd = (NumericValue) edgeReader.getFieldValue(i, fieldIndexNodeEnd); |
321 | 321 |
NumericValue type = (NumericValue) edgeReader.getFieldValue(i, fieldIndexType); |
322 | 322 |
NumericValue dist = (NumericValue) edgeReader.getFieldValue(i, fieldIndexDist); |
323 |
|
|
323 |
|
|
324 | 324 |
Vertex vFrom = (Vertex) indexer.getVertex(nodeOrig.intValue()); |
325 | 325 |
Vertex vTo = (Vertex) indexer.getVertex(nodeEnd.intValue()); |
326 |
|
|
326 |
|
|
327 | 327 |
FEdge edge = new FEdge(vFrom, vTo); |
328 | 328 |
edge.setArcID(arcID.intValue()); |
329 | 329 |
edge.setDirection(direc.intValue()); |
... | ... | |
331 | 331 |
edge.setIdNodeEnd(nodeEnd.intValue()); |
332 | 332 |
edge.setType(type.intValue()); |
333 | 333 |
edge.setWeight(dist.doubleValue()); |
334 |
|
|
334 |
|
|
335 | 335 |
g.addEdge(edge); |
336 | 336 |
} |
337 | 337 |
long t2 = System.currentTimeMillis(); |
... | ... | |
358 | 358 |
int fieldIndexType = edgeReader.getFieldIndexByName(fieldType); |
359 | 359 |
int fieldIndexDist = edgeReader.getFieldIndexByName(fieldDist); |
360 | 360 |
int fieldIndexCost = edgeReader.getFieldIndexByName(fieldCost); |
361 |
|
|
362 |
|
|
361 |
|
|
362 |
|
|
363 | 363 |
GvGraph g = new GvGraph(); |
364 | 364 |
long t1 = System.currentTimeMillis(); |
365 |
|
|
365 |
|
|
366 | 366 |
// Mirar NumberEdgeVAlue e Indexer |
367 | 367 |
for (int i=0; i < nodeReader.getRowCount(); i++) |
368 | 368 |
{ |
... | ... | |
373 | 373 |
node.setX(x.doubleValue()); |
374 | 374 |
node.setY(y.doubleValue()); |
375 | 375 |
node.setIdNode(i); |
376 |
g.addNode(node);
|
|
376 |
g.addNode(node); |
|
377 | 377 |
} |
378 |
|
|
378 |
|
|
379 | 379 |
for (int i=0; i < edgeReader.getRowCount(); i++) |
380 | 380 |
{ |
381 | 381 |
NumericValue arcID = (NumericValue) edgeReader.getFieldValue(i, fieldIndexArcID); |
... | ... | |
384 | 384 |
NumericValue nodeEnd = (NumericValue) edgeReader.getFieldValue(i, fieldIndexNodeEnd); |
385 | 385 |
NumericValue type = (NumericValue) edgeReader.getFieldValue(i, fieldIndexType); |
386 | 386 |
NumericValue dist = (NumericValue) edgeReader.getFieldValue(i, fieldIndexDist); |
387 |
|
|
387 |
|
|
388 | 388 |
GvEdge edge = new GvEdge(); |
389 | 389 |
edge.setIdArc(arcID.intValue()); |
390 | 390 |
edge.setIdEdge(i); |
... | ... | |
398 | 398 |
NumericValue cost = (NumericValue) edgeReader.getFieldValue(i, fieldIndexCost); |
399 | 399 |
edge.setWeight(cost.doubleValue()); |
400 | 400 |
} |
401 |
|
|
401 |
|
|
402 | 402 |
g.addEdge(edge); |
403 | 403 |
} |
404 | 404 |
long t2 = System.currentTimeMillis(); |
Also available in: Unified diff