/
GraphBuilder.java
133 lines (115 loc) · 4.29 KB
/
GraphBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
* Licensed to GraphHopper GmbH under one or more contributor
* license agreements. See the NOTICE file distributed with this work for
* additional information regarding copyright ownership.
*
* GraphHopper GmbH licenses this file to you 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 com.graphhopper.storage;
import com.graphhopper.routing.util.EncodingManager;
import com.graphhopper.routing.weighting.Weighting;
import java.util.Arrays;
import java.util.Collections;
/**
* For now this is just a helper class to quickly create a {@link GraphHopperStorage}
* <p>
*
* @author Peter Karich
*/
public class GraphBuilder {
private final EncodingManager encodingManager;
private String location;
private boolean mmap;
private boolean store;
private boolean elevation;
private boolean edgeBasedCH;
private long byteCapacity = 100;
private Weighting singleCHWeighting;
public GraphBuilder(EncodingManager encodingManager) {
this.encodingManager = encodingManager;
}
/**
* This method enables creating a CHGraph with the specified weighting.
*/
public GraphBuilder setCHGraph(Weighting singleCHWeighting) {
this.singleCHWeighting = singleCHWeighting;
return this;
}
public GraphBuilder setLocation(String location) {
this.location = location;
return this;
}
public GraphBuilder setStore(boolean store) {
this.store = store;
return this;
}
public GraphBuilder setMmap(boolean mmap) {
this.mmap = mmap;
return this;
}
public GraphBuilder setExpectedSize(byte cap) {
this.byteCapacity = cap;
return this;
}
public GraphBuilder set3D(boolean withElevation) {
this.elevation = withElevation;
return this;
}
public GraphBuilder setEdgeBasedCH(boolean edgeBasedCH) {
this.edgeBasedCH = edgeBasedCH;
return this;
}
public boolean hasElevation() {
return elevation;
}
/**
* Creates a CHGraph
*/
public CHGraph chGraphCreate(Weighting singleCHWeighting) {
return setCHGraph(singleCHWeighting).create().getGraph(CHGraph.class, singleCHWeighting);
}
/**
* Default graph is a {@link GraphHopperStorage} with an in memory directory and disabled storing on flush.
* Afterwards you'll need to call {@link GraphHopperStorage#create} to have a usable object. Better use
* {@link #create} directly.
*/
public GraphHopperStorage build() {
Directory dir = mmap ?
new MMapDirectory(location) :
new RAMDirectory(location, store);
GraphExtension graphExtension = encodingManager.needsTurnCostsSupport() ?
new TurnCostExtension() :
new TurnCostExtension.NoOpExtension();
return singleCHWeighting == null ?
new GraphHopperStorage(dir, encodingManager, elevation, graphExtension) :
edgeBasedCH ?
new GraphHopperStorage(Collections.<Weighting>emptyList(), Arrays.asList(singleCHWeighting), dir, encodingManager, elevation, graphExtension) :
new GraphHopperStorage(Arrays.asList(singleCHWeighting), Collections.<Weighting>emptyList(), dir, encodingManager, elevation, graphExtension);
}
/**
* Default graph is a {@link GraphHopperStorage} with an in memory directory and disabled storing on flush.
*/
public GraphHopperStorage create() {
return build().create(byteCapacity);
}
/**
* @throws IllegalStateException if not loadable.
*/
public GraphHopperStorage load() {
GraphHopperStorage gs = build();
if (!gs.loadExisting()) {
throw new IllegalStateException("Cannot load graph " + location);
}
return gs;
}
}