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

Tech.Forum

주소를 이용하여 도로주행거리 구하기

#1

안녕하세요!
아무리봐도 도저히 모르겠어서 이렇게 질문을 남깁니다.
이런쪽은 전혀 해본적이 없어서 뭐가 뭔지를 잘 모르겠네요…

제가 하고 원하는 것은 **“주소를 이용하여 도로주행거리(직선거리X) 구하기”**입니다.
저에게는 2천개쯤 되는 주유소 번호와 주소가 있습니다.
이를 이용해서 2천개 각각 주유소간의 거리를 구하고 엑셀파일로 저장하고 싶습니다.
백번 설명보다는 사진이 편할꺼 같아서 예를 만들어 스크린샷을 준비했습니다.!

A,B열은 제가 갖고 있는 데이터를 예로 든겁니다.
이를 통해 오른쪽에 있는 2가지 방법(1번,2번)으로 거리를 구하고 싶습니다.

API 코드를 보니까 JAVA 이런거 같은데 저는 이런쪽은 완전히 처음입니다. 2천개 주유소 데이터를 입력하는 방법부터 각각의 거리를 구하는 방법까지 아무리 봐도 모르겠네요… 부디 조언을 구하고 싶습니다.
어떻게 해야 할까요…?

0 Likes

#2

안녕하세요.

T map API 운영담당자입니다.

문의주신 내용을 파악한 결과, 원하시는 결과를 얻는
알고리즘은 정리하자면 아래와 같은 것으로 보입니다.

(1) 2천개 주유소 데이터를 입력하는 방법
(2) 각각의 주유소끼리의 도로주행거리 구하기
(3) 엑셀 파일로 데이터 저장

(1) 2천개의 주유소 데이터를 입력하는 방법

이 부분에 대해서는 T map API에 관련된 부분이 아니므로
자세하게 설명해드리기 어렵습니다.

구글에 java excel read write 이런식으로 검색하시면
엑셀 파일의 데이터를 읽어오거나 생성하는 예제들을 참고하셔서
각각의 주소지들을 저장합니다.

예를 들어 데이터가 문의주신 글의 내용과 같이

A0026542 | 대구광역시 남구 앞산순환로 323 (대명동)
A0026601 | 대구광역시 남구 성당로로 296 (대명3동)
A0022846 | 대구 달서구 성당로 117 (성당동)

엑셀 파일에 저장되어있고 B행의 주소 데이터를
for문을 이용해 읽어온 뒤 저장합니다.

ex)
ArrayList codeList = new ArrayList(); // 모든 주소를 담을 ArrayList
ArrayList addressList= new ArrayList(); // 모든 주소를 담을 ArrayList
try {
FileInputStream fis = new FileInputStream(“불러올 파일 경로/이름.xlsx”);
HSSFWorkbook workbook = new HSSFWorkbook(fis);
HSSFSheet sheet = workbook.getSheetAt(0); // 해당 엑셀파일의 시트(Sheet) 수
int rows = sheet.getPhysicalNumberOfRows(); // 해당 시트의 행의 개수

for(int rowIndex = 1; rowIndex < rows; rowIndex++) {
	HSSFRow row = sheet.getRow(rowIndex); // 각 행을 읽어온다

	if (row != null) {
		int cells = row.getPhysicalNumberOfCells();
		
		for (int columnIndex = 0; columnIndex <= cells; columnIndex++) {
			HSSFCell cell = row.getCell(columnIndex); // 셀에 담겨있는 값을 읽는다.
			String cellValue = String.valueOf(cell); // // 셀에 담겨있는 값을 읽는다.
			if(columnIndex == 0) {
				codeList.add(cellValue); // 코드값 저장
			} else {
				addressList.add(cellValue); // 주소값 저장
			}
		}
	}
}	

} catch (IOException e) {
e.printStackTrace();
}

(2) 각각의 주유소끼리의 도로주행거리 구하기

자동차 경로 안내 API를 이용하기 위해선 출발지와 목적지의 좌표값이 필요합니다.
위도값을 저장할 ArrayList, 경도값을 저장할 ArrayList, 도로주행거리를 저장할 ArrayList를 생성합니다.

ex)
ArrayList lonList = new ArrayList();
ArrayList latList = new ArrayList();
ArrayList distanceList = new ArrayList();

for문으로 list에 존재하는 주소지 값을 T map Full Text Geocoding API 이용하여 각각 주소지들의
경도값을 경도ArrayList, 위도값을 ArrayList에 저장합니다.

ex)
for( … ) {
/* T map Full Text Geocoding API 호출
T map Full Text Geocoding API 호출 */
lonList.add(“호출 결과의 lon 값”);
lonList.add(“호출 결과의 lat 값”);
}

list의 길이만큼 이중 for문을 돌며 T map 자동차 경로 안내 API를 호출합니다.

ex)
for(int i = 0; i < list.size(); i++) {
for(int j = 0; j < list.size(); j++) {
double totalDistance = 0;
if(i != j ) {
// 주소지가 다른 경우
String strUrl = “api2.sktelecom.com/tmap/routes?version=1
strUrl = strUrl + “&startX=”+ lonList.get(i);
strUrl = strUrl + “&startY=”+ latList.get(i);
strUrl = strUrl + “&endX=”+ lonList.get(j);
strUrl = strUrl + “&endY=”+ latList.get(j);
/* 자동차 경로 안내 API 호출
자동차 경로 안내 API 호출 */
totalDistance = xxxxxxxx… // 호출 결과의 totalDistance 값
} else {
// 주소지가 같은 경우
totalDistance = 999;
}
distanceList.add(totalDistance);
}
}

(3) 엑셀 파일로 데이터 저장

1번과 마찬가지로 엑셀 파일 생성하는 예제들을 참고하여
for문을 돌며 codeList에 담긴 코드값, addressList에 담긴 주소값, distanceList에 담긴 도로주행거리값을
엑셀 파일에 저장합니다.

감사합니다.

0 Likes