我已经在Android上的不同设备上测试graphhopper几周了。今天我在GraphHopper load(…)函数执行期间得到了一个OutOfMemory错误。这种情况发生在小米Mi4手机上。图形导出为汽车,自行车和脚与最快和最短的权重。所有的图形文件都超过17GB。
我试过这样做:为了节省内存,我删除了所有特定于其他车辆的文件:nodes_ch_fastst_bike, shortcuts_fastst_bike, shortcuts_fastst_foot等。
和修改的2行属性文件:
我删除了除car以外的标志编码器:
graph.flag_encoders=car|speed_factor=5.0|speed_bits=5|turn_costs=false|version=1
并删除除car以外的权重
graph.ch.weightings=[fastest|car, shortest|car]
现在可以正常加载了:-)
问题是,我可以安全地修改属性文件这种方式(也许删除文件是不必要的?)只加载由用户选择的车辆数据(如果用户在应用程序运行时更改车辆,图形被关闭,然后属性文件被修改为设置适当的编码器和权重和图形再次加载)。
我注意到,除了名称,即:节点,边缘,几何,location_index为支持所有车辆(汽车,自行车,脚)的图形准备的其余文件与仅为汽车准备的图形文件相比大小不同。我想这和编码有关。虽然它似乎工作正常,但我不知道确切的图结构,我想避免任何不一致。
感谢更新:我对它进行了测试,这个解决方案适用于汽车,但有时在计算自行车和汽车的路线(最短和最快的加权)时会失败。例外:
. lang。在执行doInBackground()时发生错误android.os.AsyncTask做3.美元(AsyncTask.java: 309)java.util.concurrent.FutureTask.finishCompletion (FutureTask.java: 354)java.util.concurrent.FutureTask.setException (FutureTask.java: 223)java.util.concurrent.FutureTask.run (FutureTask.java: 242)在android.os.AsyncTask SerialExecutor 1.美元运行(AsyncTask.java: 234)java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java: 1113)java.util.concurrent.ThreadPoolExecutor Worker.run美元(ThreadPoolExecutor.java: 588)java.lang.Thread.run (Thread.java: 818)由于:java.lang.IllegalStateException:计算时间不应该要求从错误方向的边缘读取速度。Reverse:true, fwd:false, bwd:falsecom.graphhopper.routing.Path.calcMillis (Path.java: 253)com.graphhopper.routing.ch.Path4CH.expandEdge (Path4CH.java: 56)com.graphhopper.routing.ch.Path4CH.expandEdge (Path4CH.java: 96)com.graphhopper.routing.ch.Path4CH.expandEdge (Path4CH.java: 96)com.graphhopper.routing.ch.Path4CH.expandEdge (Path4CH.java: 103)com.graphhopper.routing.ch.Path4CH.expandEdge (Path4CH.java: 96)com.graphhopper.routing.ch.Path4CH.expandEdge (Path4CH.java: 96)com.graphhopper.routing.ch.Path4CH.expandEdge (Path4CH.java: 96)com.graphhopper.routing.ch.Path4CH.expandEdge (Path4CH.java: 103)com.graphhopper.routing.ch.Path4CH.processEdge (Path4CH.java: 46)com.graphhopper.routing.PathBidirRef.extract (PathBidirRef.java: 92)com.graphhopper.routing.DijkstraBidirectionRef.extractPath (DijkstraBidirectionRef.java: 130)com.graphhopper.routing.AbstractBidirAlgo.calcPath (AbstractBidirAlgo.java: 64)com.graphhopper.routing.AbstractRoutingAlgorithm.calcPaths (AbstractRoutingAlgorithm.java: 120)com.graphhopper.routing.template.ViaRoutingTemplate.calcPaths (ViaRoutingTemplate.java: 110)com.graphhopper.GraphHopper.calcPaths (GraphHopper.java: 1098)com.graphhopper.GraphHopper.route (GraphHopper.java: 1003)
这应该没有问题,但目前还没有开箱即用,只能使用您描述的hack或调整源代码。在我创建这个新问题之前,这是请求和询问的