2016-10-04 2 views
2

Android 및 iOS에서 폴리 라인 문자열 (reference)을 디코드하고 싶습니다.Android/iOs : 폴리 라인 문자열 디코드

예 :

_p~iF~ps|U_ulLnnqC_mqNvxq`@ 

나는 google-maps-utils를 사용할 수있는 가능성이 알고 있지만 내가 Mapbox을 사용하고 있기 때문에 나는 또한, 나는에 허용되지 않아 내 프로젝트 (에서 모든 Google 종속성을 원하지 않는다).

지도 상자는 모바일 SDK에 대해 동일한 기능을 제공합니까? 나는 그들이 JavaScript에 대해 뭔가를 가지고 있지만 본질적으로 서버에서 JSON 응답의 크기를 줄이고 싶습니다.

아니면 내 자신의 디코딩 알고리즘을 구현할 수있는 유일한 방법입니까?

답변

3

의 목록을 만들려면이 기능을 사용할 수 있습니다. 예를 들어, 어떤 구글 종속성으로 다음을 수행 할 수 : 정밀도가 구성 할 수 있기 때문에

List<Position> path = PolylineUtils.decode(
    "_p~iF~ps|U_ulLnnqC_mqNvxq`@", Constants.GOOGLE_PRECISION); 

또한, 당신은 또한 OpenStreetMap에에서 오는 그와 같은 다른 인코딩 된 폴리 라인에 동일한 방법을 적용 할 수 있습니다.

예를 들어, check the tests 수 있습니다.

0
public static List<LatLng> decodePolyLines(String poly){ 
    int len = poly.length(); 
    int index = 0; 
    List<LatLng> decoded = new ArrayList<LatLng>(); 
    int lat = 0; 
    int lng = 0; 

    while (index < len){ 
     int b; 
     int shift = 0; 
     int result = 0; 
     do{ 
      b = poly.charAt(index++) - 63; 
      result |= (b & 0x1f) << shift; 
      shift += 5; 
     } while (b >= 0x20); 
     int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 
     lat += dlat; 

     shift = 0; 
     result = 0; 
     do { 
      b = poly.charAt(index++) - 63; 
      result |= (b & 0x1f) << shift; 
      shift += 5; 
     }while (b >= 0x20); 
     int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >>1)); 
     lng += dlng; 

     decoded.add(new LatLng(
       lat/100000d, 
       lng/100000d 
     )); 
    } 
    return decoded; 
} 

당신은 폴리 라인을 디코딩하고 Mapbox이 Mapbox Android Services의 부품과 동일한 기능을 제공하는 LatLng

+0

덕분에 자신의 알고리즘이 유일한 방법입니까? – StackoverflowForResult