Category Archives: OpenSource

[Graphhopper] 자바 console 창에서 사용해보기

Graphhopper는 routing, 즉 길 찾기를 제공해주는 강력한 Open source다.

Java기반으로 설계되어 있으며,

routing에 필요한 알고리즘 (크게 Dijkstra algorithm, A* Algorithm)을 제공하고 있으며 (둘다 bi도 제공)

사용하기 편리하고 기능이 강력하다.

Open Source Map 파일 (*.osm) 을 자체적으로 binary파일로 변환하여, routing을 제공한다.

 

다음은 간단한 사용예제다.

graphhopper github 을 방문하면 jar파일을 이용하여 실행하라고 하는데,

간단하게 java에서 메인 method를 구현하여 길찾기를 해볼 수 있는 예제를 꾸며 보았다.

해당 github에서 내려 받은 graphhopper에 java class를 만들면 되고, osm 파일도 프로젝트 안에 적절하게 넣어주면 된다.

 

String[] settingArgs = { "config=config.properties", "graph.location=sample-gh", "osmreader.osm=sample.osm" };

CmdArgs args = CmdArgs.read(settingArgs);

GraphHopper hopper = new GraphHopper().init(args);
hopper.importOrLoad();

double fromLat = 37.51600000585;
double fromLon = 127.10020554612;

double toLat = 37.51607833377;
double toLon = 127.10026852753;

GHRequest req = new GHRequest(toLat, toLon, fromLat, fromLon).setVehicle("indoor")
    .setAlgorithm(AlgorithmOptions.ASTAR_BI); // A* 알고리즘
req.getHints().put("instructions", true);

GHResponse resp = hopper.route(req);

PathWrapper result = resp.getBest();

TranslationMap map = new TranslationMap();
map.doImport();
Translation tl = map.get("en_US");

for (Instruction ist : result.getInstructions()) {
//			System.out.println("포인트: " + ist.getPoints()); // 노드 정보
//			System.out.println("거리: " + ist.getDistance()); // 거리정보
//			System.out.println("방향?: " + ist.getTurnDescription(tl)); // 방향전환정보(언어별설정가능)
//			System.out.println("싸인정보: " + ist.getSign()); // 사인 정보 (Instruction class 최상단에 선언되어 있음)
//			System.out.println("소요시간: " + ist.getTime()); // 소요시간
//			System.out.println("거리명: " + ist.getName()); // 거리의 이름 (name 태그)
//			System.out.println("추가정보: " + ist.getExtraInfoJSON()); // 추가정보
  
  System.out.println(ist.getName());
}

System.out.println(result);

hopper.close();