2016-06-29 7 views
2

Google지도를 표시하려면 SupportMapFragment를 사용합니다. 나는 방향 API를 두 위치 사이의 두 경로를 사용합니다. GSON 라이브러리로 방향 API를 반환 한 JSON 데이터를 구문 분석하고 각 경로를 보여주는 steps 태그를 추출합니다. 그런 다음 폴리 라인을 사용하여 그립니다. 하지만 내 길은 길에서 일치하지 않으며 대부분 직선입니다.Google지도에서 폴리 라인을 사용하여 두 지점 간 경로를 그립니다.

GoogleDirectionResponse data = (GoogleDirectionResponse) response; 
    if (data.getStatus().matches("OK")){ 
     List<LatLng> steps = new ArrayList<>(); 
     RoutesData routesData = data.getRoutes().get(0); 
     LegData legData = routesData.getLegs().get(0); 
     for (StepsData item : legData.getSteps()){ 
      LatLng start = new LatLng(item.getStart_location().getLat(), item.getStart_location().getLng()); 
      LatLng end = new LatLng(item.getEnd_location().getLat(), item.getEnd_location().getLng()); 
      steps.add(start); 
      steps.add(end); 
     } 
     onDirectionFetchedListener.onDirectionFetched(steps); 
    } 

I가 배열 된 LatLng 데이터를 보유하고 그것을 그릴 프래그먼트 전달 :

@Override 
public void onDirectionFetched(List<LatLng> steps) { 
    PolylineOptions rectLine = new PolylineOptions().width(3).color(
      Color.RED); 
    for (LatLng item : steps) { 
     rectLine.add(item); 
    } 

    Polyline polylin = map.addPolyline(rectLine); 
} 

및이 내 맵

코드 구글 복귀가 JSON 방향 내 추출한 : 레드 라인에서

map with direction

걸릴 모양. 그것은 길을 가리지 않습니다. 어떻게이 문제를 해결할 수 있습니다. the documentation 따르면 덕분

답변

1

단계는 경로 명령입니다. overview_polyline 개체를 구문 분석하고 인코딩 된 폴리 라인 문자열을 가져와야합니다.

List<LatLng> decodedPoints = PolyUtil.decode(polylineString); 
PolylineOptions options = new PolylineOptions(); 
options.width(3); 
options.color(Color.RED); 
options.addAll(decodedPoints); 

map.addPolyline(options); 
+0

감사합니다. 작동한다. –

2

:

legs 어레이의 각 요소는 상기 계산 된 경로의 출발지에서 목적지까지의 여정 하나의 다리를 지정한다. 웨이 포인트가없는 루트의 경우 경로는 단일 "다리"로 구성되지만 하나 이상의 중간 지점을 정의하는 경로의 경우 경로는 하나 이상의 다리로 구성되며 여정의 특정 다리에 해당됩니다.

따라서 legs 배열을 사용하면 경로를 잘 나타내지 못할 것입니다.

경로를 잘 나타내려면 overview_polyline 필드를 사용할 수 있습니다. the documentation에서 :

overview_polyline 경로의 encoded polyline 표현을 보유하고 하나의 포인트 객체가 포함되어 있습니다. 이 폴리 라인은 결과 방향의 근사 (평탄한) 경로입니다.

overview_polyline 당신이 Google Maps Android API Utility Library에서 PolyUtil.decode 방법을 사용할 수 있습니다 디코딩합니다.

+0

덕분에 다음 android-maps-utils 라이브러리를 사용하여 문자열을 디코딩. 당신의 대답은 정확합니다. 고마워요. –

+0

좋은 답변입니다. – Saad

0

자 마린 버전 :

List<LatLng> coordsList = new List<LatLng>(); 
    foreach (var step in leg.steps) 
    { 
     var points = PolyUtil.Decode(step.polyline.points); 
     foreach (var point in points) 
     { 
      coordsList.Add(point); 
     } 
    } 
관련 문제