Nuke Olaf - Log Store
[Android] 안드로이드 - Google map 폴리라인 그리기 본문
Google 에서는 location 사이의 거리를 계산하고, 목적지 주소까지 어떻게 이동해야 할지 경로를 그려주는 API 를 제공한다. 이 경로를 그리는 기능에 다양한 교통수단 모드 ( 대중교통, 걷기, 자전거, 자동차 ) 를 지원한다.
아래의 문서에서 참고하여 공부하고 사용할 수 있다
https://developers.google.com/maps/documentation/directions/start
JSON Parser 클래스
package metaler.metaler.metaler_v2;
import com.google.android.gms.maps.model.LatLng;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class DirectionsJSONParser {
/** Receives a JSONObject and returns a list of lists containing latitude and longitude
* @return*/
public List<List<HashMap<String, String>>> parse(JSONObject jObject){
List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String,String>>>() ;
JSONArray jRoutes = null;
JSONArray jLegs = null;
JSONArray jSteps = null;
try {
jRoutes = jObject.getJSONArray("routes");
/** Traversing all routes */
for(int i=0;i<jRoutes.length();i++){
jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs");
List path = new ArrayList<HashMap<String, String>>();
/** Traversing all legs */
for(int j=0;j<jLegs.length();j++){
jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps");
/** Traversing all steps */
for(int k=0;k<jSteps.length();k++){
String polyline = "";
polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points");
List list = decodePoly(polyline);
/** Traversing all points */
for(int l=0;l <list.size();l++){
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("lat", Double.toString(((LatLng)list.get(l)).latitude) );
hm.put("lng", Double.toString(((LatLng)list.get(l)).longitude) );
path.add(hm);
}
}
routes.add(path);
}
}
} catch (JSONException e) {
e.printStackTrace();
}catch (Exception e){
}
return routes;
}
/**
* Method to decode polyline points
* Courtesy : http://jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java
* */
private List decodePoly(String encoded) {
List poly = new ArrayList();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;
while (index < len) {
int b, shift = 0, result = 0;
do {
b = encoded.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 = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
LatLng p = new LatLng((((double) lat / 1E5)),
(((double) lng / 1E5)));
poly.add(p);
}
return poly;
}
}
참고사이트 >>>
https://ahsensaeed.com/android-google-maps-direction-api-show-interactive-polylines/
https://medium.com/@trientran/android-working-with-google-maps-and-directions-api-44765433f19
https://www.journaldev.com/13373/android-google-map-drawing-route-two-points
'Android' 카테고리의 다른 글
[Android] 안드로이드 - event logging (firebase) (0) | 2020.01.19 |
---|---|
[Android] 안드로이드 - 버튼을 눌렀을 때의 이벤트에 대한 고찰 (입력 이벤트) (0) | 2020.01.19 |
[Android] 안드로이드 - Fused Location Provider API 란? (0) | 2020.01.16 |
[Android] 안드로이드 - Google Map 현재 위치 표시 예제 링크 (0) | 2020.01.16 |
[Android] 안드로이드 - google map marker 검색 (0) | 2020.01.15 |
Comments