Tech. Forum 개발자들을 위한 정보 공유의 장입니다
닫기

Tech.Forum

Tmap 보행자 경로안내 Gps

#1

안녕하세요 안드로이드 어플로 시각장애인을 위한 길안내 어플을 제작중입니다.
TmapData의 findPathDataWithType을 이용하여 현재위치에서 목적지까지 폴리라인을 그렸는데

1.이것을 현재 Gps를 실시간으로 받아서 네비게이션처럼 안내할 수 있는 방법이 있나요?
2. 그게 안된다면 Gps의 위치를 폴리라인과 비교해서 벗어났는지 경로 위에 있는지 확인 할 수 있는 방법이 있나요?
아래는 제가 사용한 TmapData 라이브러리인데 여기서 보행자 경로탐색을 할때 경유지를 strPass부분으로 두어 횡단보도를 건너거나 코너를 도는것 같은데 맞나요?

public void findPathDataWithType(final TMapData.TMapPathType type, final TMapPoint startpoint, final TMapPoint endpoint, final ArrayList<TMapPoint> passList, final int searchOption, final TMapData.FindPathDataListenerCallback findPathDataListener) {
    (new Thread() {
        public void run() {
            try {
                Document doc = null;
                TMapPolyLine polyline = new TMapPolyLine();
                StringBuilder uri = new StringBuilder();
                uri.append(TMapData.dataUrl);
                if (TMapData.TMapPathType.CAR_PATH == type) {
                    uri.append("routes?version=1");
                } else if (TMapData.TMapPathType.PEDESTRIAN_PATH == type) {
                    uri.append("routes/pedestrian?version=1");
                }

                StringBuilder content = new StringBuilder();
                content.append("reqCoordType=WGS84GEO&resCoordType=WGS84GEO&format=xml");
                content.append("&startY=").append(startpoint.getLatitude());
                content.append("&startX=").append(startpoint.getLongitude());
                content.append("&endY=").append(endpoint.getLatitude());
                content.append("&endX=").append(endpoint.getLongitude());
                content.append("&startName=").append(URLEncoder.encode("출발지", "UTF-8"));
                content.append("&endName=").append(URLEncoder.encode("도착지", "UTF-8"));
                content.append("&searchOption=").append(searchOption);
                String strPass = null;
                String strPassList = "";
                if (passList != null && passList.size() > 0) {
                    for(int i = 0; i < passList.size(); ++i) {
                        strPass = ((TMapPoint)passList.get(i)).getLongitude() + "," + ((TMapPoint)passList.get(i)).getLatitude();
                        if (i != passList.size() - 1) {
                            strPass = strPass + "_";
                        }

                        strPassList = strPassList + strPass;
                    }

                    content.append("&passList=").append(URLEncoder.encode(strPassList, "UTF-8"));
                }

                doc = TMapData.getDownloadFromPostUrl("findPathDataWithType", uri.toString(), content.toString(), false);
                if (doc != null) {
                    NodeList placemark = doc.getElementsByTagName("Placemark");

                    for(int ix = 0; ix < placemark.getLength(); ++ix) {
                        Element item = (Element)placemark.item(ix);
                        String pointType = HttpConnect.getContentFromNode(item, "tmap:pointType");
                        String pointCoord;
                        if (pointType != null) {
                            String[] coord;
                            TMapPoint point;
                            if (TMapData.TMapPathType.CAR_PATH == type) {
                                if (pointType.matches("B.*")) {
                                    pointCoord = HttpConnect.getContentFromNode(item, "coordinates");
                                    if (pointCoord != null) {
                                        try {
                                            coord = pointCoord.split(",");
                                            point = new TMapPoint(Double.parseDouble(coord[1]), Double.parseDouble(coord[0]));
                                            polyline.addPassPoint(point);
                                        } catch (Exception var19) {
                                            ;
                                        }
                                    }
                                }
                            } else if (TMapData.TMapPathType.PEDESTRIAN_PATH == type && pointType.matches("PP.*")) {
                                pointCoord = HttpConnect.getContentFromNode(item, "coordinates");
                                if (pointCoord != null) {
                                    try {
                                        coord = pointCoord.split(",");
                                        point = new TMapPoint(Double.parseDouble(coord[1]), Double.parseDouble(coord[0]));
                                        polyline.addPassPoint(point);
                                    } catch (Exception var18) {
                                        ;
                                    }
                                }
                            }
                        }

                        pointCoord = HttpConnect.getContentFromNode(item, "tmap:lineIndex");
                        if (pointCoord != null) {
                            String str = HttpConnect.getContentFromNode(item, "coordinates");
                            if (str != null) {
                                String[] str2 = str.split(" ");

                                for(int k = 0; k < str2.length; ++k) {
                                    try {
                                        String[] str3 = str2[k].split(",");
                                        TMapPoint pointx = new TMapPoint(Double.parseDouble(str3[1]), Double.parseDouble(str3[0]));
                                        polyline.addLinePoint(pointx);
                                    } catch (Exception var17) {
                                        ;
                                    }
                                }
                            }
                        }
                    }
                }

                findPathDataListener.onFindPathData(polyline);
            } catch (RuntimeException var20) {
                throw var20;
            } catch (Exception var21) {
                ;
            }

        }
    }).start();
}
0 Likes

#2

안녕하세요.
T map API 운영담당자 입니다.

현재 안드로이드 SDK에서 보행자 경로안내 API 이용시 현재위치를 실시간으로 받아 네비게이션처럼 안내하는 기능은 별도로 제공해 드리고 있지 않습니다.

하지만 findPathDataAllType 함수를 이용하면 응답값 중 원하시는 정보를 가져올 수 있습니다. 이 함수를 사용하여 description을 뽑아 길안내 정보를 사용하시면 원하시는 것에 가까운 결과를 얻으실 수 있을 것 같습니다.

자세한 내용은 아래 링크를
참고하시면 도움이 되실 것 같습니다.

< findPathDataAllType >
http://tmapapi.sktelecom.com/main.html#android/docs/androidDoc.TMapData_findPathDataAllType

< 보행자 경로안내 Docs >
http://tmapapi.sktelecom.com/main.html#webservice/docs/tmapRoutePedestrianDoc
접속 후 KML의
Response를 참고

추가적으로
문의주신 소스의 strPass는
경유지를 포함한
보행자 경로안내 API 요청시에
경유지의 좌표를
보행자 경로안내 API 요청파라미터인
passList에 담아주는
역할을 하는 부분입니다.

감사합니다.

0 Likes

#3

답변 감사합니다.
다른 문의로
TMapGpsManager에서
setMinTime 과 setMinDistance 을 사용하였습니다.
인식 가능 최소시간의 범위와 인식 가능 최소거리의 범위가 궁금합니다.
또 예제에는 setMinTime이 1000으로 설정되고 setMinDistance이 5로 설정되는데
1000초에 5미터인지 단위가 궁금합니다.

0 Likes

#4

안녕하세요.
T map API 운영담당자 입니다.

TMapGpsManager Class 같은경우 현재위치를 사용하고자 할때 requestLocationUpdates 함수를 사용하는데 이 부분은 Android 내부함수를 사용하는 것이기 때문에

자세한 내용은 아래 링크를 참고하시면 될 것 같습니다. ------------------------------------- < Android Developers > https://developer.android.com/reference/android/location/LocationManager#requestLocationUpdates(java.lang.String,%20long,%20float,%20android.location.LocationListener) -------------------------------------

감사합니다.

0 Likes

#5


안녕하세요. 현재 대학교 재학중인 한 학생입니다. 다름이 아니라 시각 장애인용 어플을 개발하고 계신다는 내용을 봤습니다. 저희 동아리에서 비슷한 내용의 프로젝트를 진행 중인데, 정말 간곡히 부탁 드립니다. 혹시 소스를 일부라도 알려주실수 있다면 일정 사례라도 하겠습니다. 부탁드립니다. 감사합니다

0 Likes