Skip to content

Repository files navigation

FunFun

루디, 콩쌤, 피비, 으노, 쿄조, 제리

T map 보행 경로를 기반으로, 회전 지점에서 실제로 알아보기 쉬운 주변 장소를 랜드마크로 제시하는 iOS 프로토타입입니다. Apple 지도, T map, 네이버 지도 중 원하는 지도 엔진으로 같은 경로와 랜드마크를 확인할 수 있습니다.

랜드마크는 어떻게 정하나요?

이 프로젝트는 지도 SDK가 자동으로 추천하는 장소를 그대로 표시하지 않습니다. T map의 보행 경로 데이터로 회전 지점을 찾고, 각 회전 지점 주변의 T map POI(장소) 데이터를 다시 조회한 다음, 앱의 거리·방향·가시성 규칙으로 한 곳을 고릅니다.

장소 검색 또는 현재 위치
        ↓
T map 보행 경로 요청
        ↓
회전 · 횡단보도 · 계단 · 도착 지점 추출
        ↓
각 회전 지점 주변의 T map POI 검색
        ↓
거리 · 경로 인접성 · 회전 방향 · 업종 가시성 평가
        ↓
중복을 제거한 최대 10개 랜드마크를 지도와 안내 문구에 표시

데이터 출처와 API

모든 장소·경로 데이터는 SK OpenAPI의 T map REST API에서 가져옵니다. 요청에는 프로젝트 설정의 TMAP_APP_KEY가 필요합니다.

용도 API 사용 정보
출발지·목적지 검색 GET /tmap/pois 장소명, 주소, 업종, 좌표
도보 경로 계산 POST /tmap/routes/pedestrian?version=1 경로 선, 회전 유형, 안내 문구, 경로상 순서
랜드마크 후보 검색 GET /tmap/pois/search/around 회전 지점 주변 POI 최대 100개
현재 위치 Apple Core Location GPS 좌표, 방위, 위치 정확도

경로 요청과 POI 요청은 모두 WGS84 위도·경도 좌표계를 사용합니다. T map 지도 SDK는 지도 표시에만 사용하며, 랜드마크 후보 선정은 REST API 응답과 앱 내부 규칙으로 수행합니다.

선정 과정

1. 경로에서 안내 기준점 만들기

보행 경로 응답은 선(LineString)과 지점(Point)으로 구성됩니다.

  • 선 데이터는 지도에 그릴 실제 보행 경로가 됩니다.
  • 지점 데이터의 turnType, pointType, description을 이용해 좌회전, 우회전, 횡단보도, 계단, 도착 등의 안내 지점을 만듭니다.
  • 단순 직진 지점은 제외합니다. 즉, 모든 경로 좌표가 아니라 사용자에게 동작이 필요한 지점을 기준으로 랜드마크를 찾습니다.

2. 회전 지점 주변의 POI 모으기

각 안내 지점을 중심으로 T map 주변 POI API를 호출합니다.

  • API 검색 범위: 반경 1km
  • 요청 결과: 거리순 최대 100개
  • 앱 내부에서 다시 정밀하게 걸러, API의 넓은 검색 범위가 그대로 화면에 반영되지 않도록 합니다.

3. 랜드마크 후보 필터

아래 조건을 모두 만족해야 후보가 됩니다.

조건 기준 이유
출발지와의 거리 10m 초과 출발 직후의 불필요한 장소를 제외
회전 지점과의 거리 30m 이하 실제 회전 순간에 식별 가능한 장소만 선택
경로 선과의 거리 20m 이하 골목 건너편이나 경로와 무관한 장소를 제외
좌·우 회전 방향 해당 편에 2m 이상 “왼쪽/오른쪽의 장소”라는 안내와 실제 위치를 맞춤
후보 점수 40점 이하 너무 멀거나 부적합한 장소를 최종 제외

좌·우 방향은 회전 직전의 진행 방향 벡터와 POI 위치의 상대 벡터를 비교해 계산합니다. 좌회전일 때는 진행 방향의 왼편, 우회전일 때는 오른편 POI를 우선합니다. 직진·횡단보도·계단은 좌우 조건을 적용하지 않습니다.

4. 후보 점수와 가시성

필터를 통과한 후보 중 가장 낮은 점수의 POI를 선택합니다.

점수 = 회전 지점까지 거리
     + (경로 선까지 거리 × 0.3)
     + 회전 지점 뒤편에 있으면 20점
     - 업종별 가시성 보너스

가시성 보너스는 실제 보행 중 인지하기 쉬운 장소를 우대하기 위한 규칙입니다.

예시 업종 보너스
편의점, 마트, 지하철, 공원, 은행, 공공기관 20
카페, 약국, 병원, 호텔, 주유소 15
식당, 제과점, 쇼핑 시설, 영화관 10
ATM, 주차장, 버스정류장, 화장실 5
그 밖의 업종 2

5. 최종 표시

  • 같은 POI는 한 번만 사용합니다.
  • 경로 전체에서는 최대 10개만 선택합니다.
  • 지도에는 랜드마크 이름, 위치 반경, 회전 지점과 랜드마크를 잇는 보조 선을 표시합니다.
  • 선택된 랜드마크가 있으면 OO편의점을(를) 기준으로 오른쪽으로 이동하세요와 같은 안내 문구를 만듭니다.
  • 적합한 POI가 없으면 T map 경로 API가 제공한 원래 안내 문구를 그대로 사용합니다.

지도 엔진의 역할

지도 엔진 역할
Apple MapKit 경로와 랜드마크 표시
T map SDK 경로와 랜드마크 표시
Naver Maps SDK 경로와 랜드마크 표시

지도 엔진을 바꾸더라도 랜드마크 선정 결과는 동일합니다. 경로와 POI를 가져오고 선택하는 로직은 지도 화면과 분리되어 있습니다.

현재 방식의 성격과 한계

현재 구현은 학습·프로토타입을 위한 규칙 기반 휴리스틱입니다. POI의 실제 간판 가시성, 영업 여부, 도로 공사, 보행자의 시야, 실시간 혼잡도까지 판단하지는 않습니다. 또한 회전 지점마다 주변 POI API를 호출하므로, 긴 경로에서는 API 요청 수와 T map의 호출 한도를 고려해야 합니다.

랜덤한 주변 장소를 보여 주는 방식보다 회전 상황과 연관된 안내를 만들 수 있지만, 서비스 수준에서는 POI 캐싱, 요청 동시성 제한, 사용자 피드백, 장소 신뢰도·영업 상태 등의 보강이 필요합니다.

설정

Config/Secrets.example.xcconfig를 참고해 T map 앱 키를 설정합니다.

TMAP_APP_KEY = YOUR_TMAP_APP_KEY

앱은 Info.plistTMAP_APP_KEY 값을 읽어 API 요청의 appKey 헤더에 사용합니다.

About

Apple Developer Academy Challenge4 Project

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages