커리큘럼
아카데미모듈 6 · Git·코드·지도·디자인 활용
지도 캔버스로 장소 분석
이 레슨에서 배우는 것
- 채팅에서 공간 질문을 던져 지도를 얻을 수 있고, 지도 버튼이 왜 없는지 설명할 수 있습니다
- "크게 보기"로 지도를 전체 화면으로 열고, 베이스맵을 바꾸고, 범례를 읽을 수 있습니다
- 지도 위 마크를 선택해 @멘션으로 에이전트에게 넘기고, 핀에서 지식그래프로 건너뛸 수 있습니다
- 장소가 그래프에 기억된 뒤에는 최근접, 반경 내, 실제 경로, 이동 시간 같은 후속 공간 질문을 던질 수 있습니다
고객 미팅 장소, 사건 기록의 주소, 여행 일정처럼 위치가 중요한 자료는 지도에서 거리와 분포를 확인할 수 있습니다.
채팅에서 "고객 미팅을 지도에 올려 줘"나 "사무실에서 15분 안에 갈 수 있는 곳은?"이라고 요청해 보세요. 에이전트가 장소를 좌표로 변환하고 분석한 뒤, 이동·확대·선택할 수 있는 지도를 대화에 표시합니다.
채팅에서 지도 생성 요청
앱 어디에도 지도 버튼이나 사이드바 아이콘이 없습니다. 지도는 에이전트가 채팅 턴 중에 write_map 툴을 호출해야 생겨납니다. 그러니 아무 채팅에서나 지도를 요청하면 됩니다.
장소 이름이 좌표로 바뀌는 동안 "Geocoding places"(장소 지오코딩) 카드가 뜹니다. 이어서 "Authored map"(지도 작성 완료) 카드가 나타나고, 그 아래에 살아 있는 지도가 인라인으로 표시됩니다. 이동도 줌도 클릭도 그 자리에서 바로 됩니다.
에이전트가 지도를 만드는 방식
에이전트는 선언적 JSON "맵스펙"을 내놓습니다. 제목, 시작 카메라 뷰, 베이스맵 선택, GeoJSON 데이터에 묶인 레이어 목록이 담기죠. 앱은 이 스펙을 두 번 검증합니다. 한 번은 스펙을 쓰는 순간, 또 한 번은 렌더링 직전입니다. 그런 다음 네이티브 지도 레이어로 컴파일합니다.
모델은 렌더링 코드를 쓰지 않고, 지오메트리를 지어내지도 않습니다. 좌표는 전부 실제 지오코딩에서 나오므로, 지도에 보이는 모든 것은 실재하는 장소로 이어집니다.
지도는 8가지 레이어 타입으로 조립합니다. 원하는 대로 쌓고 겹칠 수 있습니다.
scatterplot: 점. 핀과 버블이며, 반지름에 숫자 값을 매핑할 수 있습니다heatmap: 부드러운 밀도 표현geojson: 폴리곤과 선. 행정구역 경계나, 값에 따라 지역을 색칠한 코로플레스 지도 같은 것path: 경로text: 지도 위에 놓는 라벨hexagon: 셀마다 실제 값이 붙는 자동 육각 밀도 집계arc: 출발지와 도착지 쌍을 잇는 대권 연결선raster: 실시간 날씨 같은 타일 이미지 오버레이
크게 열어 보기
인라인 카드 하단에 "크게 보기" 버튼이 있습니다. 누르면 지도가 전체 화면 탭(지도 핀 아이콘, 지도 제목)으로 열립니다. 채팅은 왼쪽 사이드바로 붙어서, 지도를 보면서 계속 대화할 수 있습니다.
조작은 익숙한 제스처 그대로입니다. 드래그로 이동, 스크롤이나 핀치로 줌, 오른쪽 드래그로 회전과 기울이기. 열릴 때 카메라가 데이터 전체에 자동으로 맞춰지고, 3D 돌출이 있는 지도는 처음부터 기울어진 채 열립니다.
| 컨트롤 | 위치 | 하는 일 |
|---|---|---|
| 내비게이션 컨트롤 | 오른쪽 위 | 줌 인, 줌 아웃, 그리고 북쪽과 수평으로 되돌리는 나침반/피치 버튼 |
| "지도 스타일" 버튼 | 오른쪽 위, 내비게이션 아래 | 베이스맵 메뉴: "표준"(기본 3D), "은은함", "단색", "라이트 2D", "다크 2D", "위성". 고른 스타일은 에이전트가 지도를 다시 써도 유지됩니다 |
| 범례 | 오른쪽 아래, 전체 화면 전용 | 카테고리마다, "≥ 50" 같은 코로플레스 구간마다, 또는 레이어마다 붙는 색 견본과 라벨 |
| 시간 스크러버 | 아래 가운데, 시간 차원이 있는 지도에서만 | 타임스탬프 데이터를 되감아 재생합니다(아래에서 자세히 다룹니다) |
| 호버 툴팁 | 인터랙티브한 모든 마크 | 피처(지도 위 개별 점·도형)의 필드를 보여주는 작은 팝업(예외는 히트맵 레이어로, 호버도 클릭도 안 됩니다) |
인라인 지도가 깔끔한 건 의도입니다
대화 속 지도는 제목도 범례도 없이 렌더링됩니다. 색이 무엇을 뜻하는지는 에이전트가 바로 그 자리 답변에서 설명해 주므로, 그림 자체는 군더더기 없이 깔끔하게 유지됩니다.
전체 범례가 필요하다면 크게 열어 보세요. 전체 화면 탭이 모든 카테고리와 구간을 펼쳐서 보여 줍니다.
지도에서 장소를 선택해 질문하기
지도에서 채팅으로, 다시 그래프로
- 마크를 클릭합니다
지도 상단에 "선택됨: {라벨}" 알약이 나타납니다. "×" 버튼("선택 해제")으로 해제하거나, 빈 지도를 클릭해도 풀립니다.
- 작성창이 받아 갑니다
채팅 작성창에
@라벨멘션 칩이 생깁니다. 다음 메시지에는 그 피처의 전체 속성과 좌표가 보이지 않게 딸려 갑니다. 그래서 "이건 왜 이상치야?" 한마디가 그냥 통합니다. - 바로 그 장소에 대해 묻습니다
메시지를 보내면 에이전트는 당신이 클릭한 바로 그 피처를 데이터째로 받습니다. 어느 점을 말하는지 설명할 필요가 없습니다.
- 지식그래프로 건너뜁니다
클릭한 피처가 내 엔티티에 묶여 있으면 알약에 "그래프에서 보기" 버튼이 함께 나타납니다. 한 번 누르면 그 엔티티에 포커스된 그래프 뷰가 열립니다.
거리·경로·분포 분석
지도는 제대로 일합니다. 공간 분석은 앱이 직접, 결정론적으로 계산하고, 실제 이동 지오메트리는 직선 어림 대신 실시간 서비스에서 가져옵니다.
| 이렇게 물으면 | 이것이 돌아갑니다 |
|---|---|
| "사건이 어디에 몰려 있어?" | 육각 밀도 집계, 또는 hotspot 분석(Getis-Ord Gi*). 통계적으로 유의한 핫스팟과 콜드스팟을 찾아냅니다 |
| "어디로 번지고 있어?" | emergingHotspot. 셀마다 심화, 감소, 지속, 신규, 산발, 과거형으로 분류하는 시공간 추세 검정 |
| "A에서 B까지 어떻게 가?" | directions. 경유지 사이의 실제 도로, 도보, 자전거 경로. 거리와 소요 시간도 포함합니다 |
| "사무실에서 15분 안에 갈 수 있는 곳은?" | isochrone. 실제 이동 시간 도달 폴리곤. N분 안에 닿을 수 있는 모든 곳을 여러 시간대로 겹쳐 보여 줍니다 |
| "각 매장에서 제일 빨리 닿는 창고는?" | travel_matrix. 지점들 사이의, 출발지에서 도착지까지의 이동 시간 행렬 |
| "창고 2km 안에 뭐가 있어?" (지도 없이) | query_geo. 그래프가 이미 기억하는 장소들에 대한 최근접, 반경 내, 경계 상자, 폴리곤 내부 질의 |
GeoSPARQL: 그래프가 장소를 기억하는 방식
GeoSPARQL은 지식그래프에서 지리를 다루는 개방형 W3C/OGC 표준입니다. 위치도 그저 하나의 사실이어서, 엔티티에 "POINT(경도 위도)" 형태의 좌표 리터럴로 저장됩니다.
에이전트가 내 엔티티로 태깅된 점을 지도에 올리면 그 좌표는 전용 파생 그래프에 기록되고, 노트 자체의 사실과는 분리됩니다. 그래서 기계가 유도한 좌표가 노트가 실제로 말한 내용과 절대 섞이지 않고, 노트를 재추출해도 살아남습니다.
(교토역) -위치-> POINT(135.7587 34.9858)지도의 진짜 값어치는 그 다음부터입니다. 어떤 장소가 엔티티 바인딩과 함께 한 번 지도에 오르고 나면, 에이전트는 아무것도 그리지 않고도 그 장소에 대한 공간 질문에 답합니다. "가장 가까운 고객 5곳"이나 "이 구역 안의 모든 자산"을 물어보면, 이후 어느 대화에서든 query_geo가 처리해 줍니다.
시점별 지도 데이터 확인
맵스펙에 시간 필드가 선언되어 있으면 지도에 시간 스크러버가 생깁니다. 인라인 카드에서는 하단에, 전체 화면 탭에서는 아래 가운데에 있습니다(접근성 이름 "시간 스크러버"). 기본값은 맨 끝, 즉 전부 보이는 상태입니다.
왼쪽으로 끌면 선택한 시점까지의 피처가 누적으로 필터링됩니다. 변환이 필터링된 데이터 위에서 다시 계산되기 때문에, 육각 집계와 핫스팟, 코로플레스가 드래그하는 동안 살아 움직입니다. 스크러빙은 카메라를 다시 프레이밍하지 않으므로, 한 동네를 응시한 채 패턴이 재생되는 걸 지켜볼 수 있습니다.
첫 지도 만들어 보기
- 채팅을 열고 공간 질문을 던집니다: "내 노트에 나오는 장소들을 지도에 올려 줘."
- 대화를 지켜봅니다. "Geocoding places"(장소 지오코딩) 카드가 지명을 좌표로 바꿉니다. 이어서 "Authored map"(지도 작성 완료) 카드가 뜨고, 그 아래에 살아 있는 지도가 나타납니다.
- 지도 하단의 "크게 보기"를 눌러 전체 화면 탭으로 엽니다.
- "지도 스타일" 메뉴에서 "위성"으로 바꿨다가 다시 "단색"으로 돌아와 보고, 오른쪽 아래 범례도 확인하세요.
- 마크 하나를 클릭해 "선택됨" 알약을 읽고, 후속 질문을 보냅니다: "이곳에 대해 더 알려 줘."
지도가 전체 화면으로 열리고 채팅이 왼쪽에 붙습니다. 클릭한 피처는 @멘션으로 함께 실려 가서, 에이전트가 정확히 그 장소에 대해 답합니다. 마크가 내 엔티티라면 알약에 "그래프에서 보기" 버튼도 함께 보입니다.
- 맵스펙(mapspec)
- 에이전트가 쓰는 선언적 JSON. 제목, 카메라, 베이스맵, 레이어가 담깁니다. 두 번 검증되어 네이티브 지도 레이어로 컴파일됩니다.
- 변환(transform)
- 레이어 데이터 위에서 앱이 돌리는 파라미터형 공간 계산: 육각 집계, 커널 밀도, 버퍼, 클러스터, 보로노이, 핫스팟 통계 등.
- 지오코딩
- 장소 이름을 OpenStreetMap으로 좌표로 바꾸는 일. 정방향, 역방향, 이름 하나부터 한꺼번에 여러 개까지 됩니다. 모든 좌표는 실제로 확인된 위치입니다.
- 등시선(isochrone)
- 이동 시간 도달 폴리곤: N분 안에 닿을 수 있는 모든 곳을 실제 도로망 위에서 계산한 것.
- 시간 스크러버
- 시간 차원이 있는 지도의 슬라이더. 선택한 시점까지 피처를 누적 필터링하고, 드래그하는 동안 분석 레이어를 실시간으로 다시 계산합니다.
- query_geo
- 지식그래프가 기억해 둔 엔티티 좌표에 대해 최근접, 반경 내, 폴리곤 내부 질문에 답하는 에이전트 툴.
거리를 나타내려면 커버리지 고리를 요청하세요
점 크기는 화면 픽셀 채널입니다. 값의 크고 작음을 나타내기엔 좋지만, 지면에서의 실제 거리를 뜻하지는 않습니다.
실제 지리적 반경이 필요할 때, 이를테면 창고 2km 이내 전부나 각 병원 주변 도보 10분권 같은 걸 원할 때는 바로 그렇게 요청하세요. 그러면 에이전트가 실제 거리 기준으로 잡은 버퍼 폴리곤(또는 이동 시간 등시선)을 그려 줍니다.
지도는 에이전트가 대화 안에서 그려 주는 캔버스입니다. 다음 레슨의 디자인 캔버스에서는 에이전트가 화면 자체를 그려 주고, 당신은 그것을 붙잡아 다듬게 됩니다.