티스토리 뷰
Android Tmap 경로 API
- 프로젝트 진행중 걸은 거리를 추적해서 이동 경로를 지도상에 선 형태로 그려주는 기능을 구현하려고 했다.
- 처음에는 GPS 값만 가져와 Google Map에서 지원해주는 Polyline 형태로 그려주는 방법을 생각했었는데 실제 도로에 표시되지 않는 정확도가 떨어지는 경우가 많았다.
- Polyline을 그리는 자세하 방법은 아래 포스트를 참고해주세요
- 방법을 알아보다 Tmap의 경로 API를 통해서 출발, 도착 Point를 가지고 도로에 Point들을 매핑 하도록 구현을 하기로 했다.
- Google Road API도 동일한 기능을 지원 하지만 한국에는 지원을 하지 않았음
구현 방법
- 기본적인 코드 베이스는 아래 위치를 참고하였다.
기본적인 동작 방식
- 우선 T API에 가입후 API를 발급 받아야 한다. (자세한 발급 방법은 검색을 참고하시면 됩니다)
- 아래 코드의 BasicNameValuePair에는 API Argument로 출발지, 도착지, 좌표계 등을 넣어준 후 Http post로 요청을 날린다.
- Point 값은 지점의 좌표값 이고 LineString은 경로의 좌표들을 나타내는 것 같아보임
- 얻어진 좌표값을 LatLng ArrayList에 넣어주고 반환하면 그대로 지도상에 Polyline으로 그려준다.
- 다른 데이터들을 활용하거나 T map 경로 API의 자세한 정보는 이곳에서 확인하실수 있습니다.
https://developers.skplanetx.com/apidoc/kor/t-map/course-guide/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
public class RoadTracker {
private static final String TAG = "RoadTracker";
private GoogleMap mMap;
private GeoApiContext mContext;
private ArrayList<LatLng> mCapturedLocations = new ArrayList<LatLng>(); //지나간 좌표 들을 저장하는 List
private static final int PAGINATION_OVERLAP = 5;
private static final int PAGE_SIZE_LIMIT = 100;
private ArrayList<com.google.android.gms.maps.model.LatLng> mapPoints;
int totalDistance;
public RoadTracker(GoogleMap map){
mMap = map;
}
// public void drawCorrentPath(ArrayList<LatLng> checkedLocations){
// getJsonData().get();
// }
public ArrayList<com.google.android.gms.maps.model.LatLng> getJsonData(final LatLng startPoint, final LatLng endPoint){
Thread thread = new Thread(){
@Override
public void run(){
HttpClient httpClient = new DefaultHttpClient();
String urlString = "https://apis.skplanetx.com/tmap/routes/pedestrian?version=1&format=json&appKey=본인의 API 키";
try{
URI uri = new URI(urlString);
HttpPost httpPost = new HttpPost();
httpPost.setURI(uri);
List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();
nameValuePairs.add(new BasicNameValuePair("startX", Double.toString(startPoint.lng)));
nameValuePairs.add(new BasicNameValuePair("startY", Double.toString(startPoint.lat)));
nameValuePairs.add(new BasicNameValuePair("endX", Double.toString(endPoint.lng)));
nameValuePairs.add(new BasicNameValuePair("endY", Double.toString(endPoint.lat)));
nameValuePairs.add(new BasicNameValuePair("startName", "출발지"));
nameValuePairs.add(new BasicNameValuePair("endName", "도착지"));
nameValuePairs.add(new BasicNameValuePair("reqCoordType", "WGS84GEO"));
nameValuePairs.add(new BasicNameValuePair("resCoordType", "WGS84GEO"));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpClient.execute(httpPost);
int code = response.getStatusLine().getStatusCode();
String message = response.getStatusLine().getReasonPhrase();
Log.d(TAG, "run: " + message);
String responseString;
if(response.getEntity() != null)
responseString = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);
else
return;
String strData = "";
Log.d(TAG, "0\n");
JSONObject jAr = new JSONObject(responseString);
Log.d(TAG, "1\n");
JSONArray features = jAr.getJSONArray("features");
mapPoints = new ArrayList<>();
for(int i=0; i<features.length(); i++)
{
JSONObject test2 = features.getJSONObject(i);
if(i == 0){
JSONObject properties = test2.getJSONObject("properties");
totalDistance += properties.getInt("totalDistance");
}
JSONObject geometry = test2.getJSONObject("geometry");
JSONArray coordinates = geometry.getJSONArray("coordinates");
String geoType = geometry.getString("type");
if(geoType.equals("Point"))
{
double lonJson = coordinates.getDouble(0);
double latJson = coordinates.getDouble(1);
Log.d(TAG, "-");
Log.d(TAG, lonJson+","+latJson+"\n");
com.google.android.gms.maps.model.LatLng point = new com.google.android.gms.maps.model.LatLng(latJson, lonJson);
mapPoints.add(point);
}
if(geoType.equals("LineString"))
{
for(int j=0; j<coordinates.length(); j++)
{
JSONArray JLinePoint = coordinates.getJSONArray(j);
double lonJson = JLinePoint.getDouble(0);
double latJson = JLinePoint.getDouble(1);
Log.d(TAG, "-");
Log.d(TAG, lonJson+","+latJson+"\n");
com.google.android.gms.maps.model.LatLng point = new com.google.android.gms.maps.model.LatLng(latJson, lonJson);
mapPoints.add(point);
}
}
}
} catch (URISyntaxException e) {
Log.e(TAG, e.getLocalizedMessage());
e.printStackTrace();
} catch (ClientProtocolException e) {
Log.e(TAG, e.getLocalizedMessage());
e.printStackTrace();
} catch (IOException e) {
Log.e(TAG, e.getLocalizedMessage());
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
thread.start();
try{
thread.join();
}catch (InterruptedException e){
e.printStackTrace();
}
return mapPoints;
}
}
|
cs |
관련글
끝으로
이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏
광고 클릭은 많은 힘이 됩니다!
반응형
'프로그래밍 > Android' 카테고리의 다른 글
(Android) 광학 문자 인식 라이브러리 Tesseract OCR(tess-two) 사용방법 (2) | 2016.11.01 |
---|---|
(Android) 광학 문자 인식 라이브러리 Tesseract OCR 의 원리 (1) | 2016.11.01 |
(Android) Dialog Fragment 구현 방법 및 예제 (0) | 2016.10.26 |
(Android) Activity Screen 세로 혹은 가로 화면 고정하는 방법 (0) | 2016.10.03 |
(Android) Google Map 이동한 거리 선(polyline) 으로 그리기 (17) | 2016.09.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 일본 여행
- 이펙티브
- intelij
- 일본여행
- TableView
- JavaFX 테이블뷰
- 자전거 여행
- springboot
- 자전거
- java
- 스프링부트
- 방통대 과제물
- JavaFX
- 자바
- 일본 배낭여행
- windows
- JavaFX Window Close
- 이펙티브 자바
- effectivejava
- 텐트
- 이펙티브자바
- 인텔리제이
- Java UI
- 배낭여행
- 배낭 여행
- JavaFX Table View
- effective java
- 일본 자전거 여행
- JavaFX 종료
- git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함