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

Tech.Forum

findpathDataAllType 관련질문

#1

public class MainActivity extends AppCompatActivity implements TMapGpsManager.onLocationChangedCallback {

private boolean m_bTrackingMode = true;
private TMapGpsManager tmapgps = null;
private TMapView tMapView = null;
private TMapPoint tpoint = null;
private double currentLatitude;
private double currentLongitude;
TMapData tmapdata;
String adr; // 전역변수 (주소)
private ArrayList adrlist = new ArrayList(); // 전역변수 arraylist (주소)
private ArrayList pathlist = new ArrayList(); // 전역변수 arraylist (경로안내)



private static String mApiKey = "내키";


@Override
public void onLocationChange(Location location) {

    if (m_bTrackingMode) {
        tMapView.setLocationPoint(location.getLongitude(), location.getLatitude());
        tMapView.setCenterPoint(location.getLongitude(), location.getLatitude());


    }
    currentLatitude = location.getLatitude();
    currentLongitude = location.getLongitude();
}

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);




    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
    LinearLayout LinearLayoutTmap = (LinearLayout) findViewById(R.id.map_view);

    tMapView = new TMapView(this);
    tmapdata = new TMapData();
    LinearLayoutTmap.addView(tMapView);
    TMapPoint startpoint = new TMapPoint(currentLatitude,currentLongitude); //출발지
    TMapPoint endpoint = new TMapPoint(35.133627, 129.103952); //목적지
    tMapView.setSKTMapApiKey(mApiKey);


    //tMapView.setCenterPoint( 127.058677, 37.585061);
    tMapView.setZoomLevel(15);
    tMapView.setCompassMode(true); /*현재보는방향*/
    tMapView.setIconVisibility(true); /*현위치 아이콘 표시*/

    tMapView.setMapType(TMapView.MAPTYPE_STANDARD);
    tMapView.setLanguage(TMapView.LANGUAGE_KOREAN);

    tmapgps = new TMapGpsManager(MainActivity.this);
    tmapgps.setMinTime(1000);
    tmapgps.setMinDistance(5);
    tmapgps.setProvider(tmapgps.NETWORK_PROVIDER);

    //tmapgps.setProvider(tmapgps.GPS_PROVIDER); //gps로 현 위치 잡기
    tmapgps.OpenGps();

    tMapView.setTrackingMode(true);
    tMapView.setSightVisible(true);


    tmapdata.findPathDataAllType(TMapPathType.PEDESTRIAN_PATH, startpoint, endpoint, new TMapData.FindPathDataAllListenerCallback() {
        @Override
        public void onFindPathDataAll(Document document) {
            Element root = document.getDocumentElement();
            NodeList nodeListPlacemark = root.getElementsByTagName("Placemark");
            for( int i=0; i<nodeListPlacemark.getLength(); i++ ) {
                NodeList nodeListPlacemarkItem = nodeListPlacemark.item(i).getChildNodes();
                for( int j=0; j<nodeListPlacemarkItem.getLength(); j++ ) {
                    if( nodeListPlacemarkItem.item(j).getNodeName().equals("description") ) {
                        Log.d("debug", nodeListPlacemarkItem.item(j).getTextContent().trim() );
                    }
                }
            }
        }
    });
}

}

이게 부분 코드입니다.

첫번째 질문!

start 를 현재 위치로 하고 end 를 잡아놓고 하고 싶습니다.

저렇게하면
디버그 한 후 Logcat 을 보면

05-06 22:19:39.953 29322-29461/com.example.myapplication W/SKT: No Content 나옵니다.
어떻게 해야 할까요?

그리고

두번째 질문!

사진을 보시면 출발 지점과 도착 지점 사이에 라인 이 있는데,
findpathDataAllType 을 사용해서
이 라인의 부분부분마다 위도와 경도를
배열에 저장할 방법이 있을까요?

0 Likes

#2

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

답변 1 보내주신 내용만으로는 onLocationChanged 동작하는 시점을 정확히 파악하기 어렵습니다.

다만, 안드로이드 LocationListener의 onLocationChanged 함수는 LocationManager 클래스의 requestLocationUpdates 메소드로 별도의 동작을 시켜줘야합니다.

아래의 소스를 참고하시면 도움이 되실 겁니다. ---------------------------------- LocationManager locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); LocationListener locationListener = new LocationListener() {  @Override  public void onLocationChanged(Location location) {   if(location != null) {    double latitude = location.getLatitude();    double longitude = location.getLongitude();   }

  currentLatitude = location.getLatitude();   currentLongitude = location.getLongitude();  }

@Override public void onStatusChanged(String provider, int status, Bundle extras) {}

@Override public void onProviderEnabled(String provider) {}

@Override public void onProviderDisabled(String provider) {} };

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); ----------------------------------

답변 2 문의주신 findpathDataAllType 함수의 경로좌표 정보는 coordinates 정보를 파싱하시면 원하시는 좌표값을 얻으실 수 있습니다.

아래의 링크에서 KML을 참조하시면 도움이 되실 겁니다.


< 자동차 경로안내 >
http://tmapapi.sktelecom.com/main.html#webservice/docs/tmapRouteDoc

감사합니다.

0 Likes

#3

tmapdata.findPathDataAllType(TMapPathType.PEDESTRIAN_PATH, startpoint, endpoint, new TMapData.FindPathDataAllListenerCallback() {
@Override
public void onFindPathDataAll(Document document) {
Element root = document.getDocumentElement();
NodeList nodeListPlacemark = root.getElementsByTagName(“Placemark”);
for( int i=0; i<nodeListPlacemark.getLength(); i++ ) {
NodeList nodeListPlacemarkItem = nodeListPlacemark.item(i).getChildNodes();
for( int j=0; j<nodeListPlacemarkItem.getLength(); j++ ) {
if( nodeListPlacemarkItem.item(j).getNodeName().equals(“description”) ) {
Log.d(“debug”, nodeListPlacemarkItem.item(j).getTextContent().trim() );

2번에 대한 추가 질문좀 하겠습니다…
Coordinates 를 쓰면
출발지 , 도착지 , 그 사이 코너 값 의 위도경도만 받아오는데 그거 말고는 받을수 없나요?

저 위에 코드에 Placemark 에 Point
description 에 coordinates를 사용했습니다

0 Likes

#4

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

문의주신 내용을 검토해본 결과 Placemark는 point와 LineString로 구분됩니다. point의 경우, 각 좌표의 구간정보 LineString의 경우, 경로의 좌표정보가 결과값으로 나옵니다.

감사합니다.

0 Likes