# 지역 간 역사 이동 경로와 격자 표시

삼국지·후한서·진서·화양국지의 군사 행동 기록과 지방지·정부·문화관의 고도 자료를 조사한 **7개 권역·80개 주요 경로**입니다. 육로 47개, 수로 14개, 수륙 혼합 19개입니다. 도시·관문 73곳을 포함하고 경로에서 153개 역사 지명 노드를 사용합니다. 2026-10-06 지명 보완을 위해 연결 추정 5개를 추가했습니다. 이 5개는 군사 노선 확인으로 취급하거나 격자를 보호하지 않습니다. 이릉의 병행 육로는 해당 혼합 경로에 포함해 경로 수와 별개로 관리합니다. [지명 점검](./PLACE_AUDIT.md).

사료에 직접 기록된 이동 축과 후한·삼국 시대의 통로, 지리상 연결을 근사한 추정을 구분합니다. 출발·도착점만 기록된 원정의 모든 중간 성을 필수 통과점으로 단정하지 않습니다. 좌표와 지점 사이 선형은 **권역 근사**이며, 모든 고대 지선·도하점·실측 도로·시대별 하천을 완성한 GIS가 아닙니다. 수로 일부의 선형은 현대 Natural Earth 하천을 참고합니다.

## 확장한 경로망

| 권역 | 경로 수 | 대표 연결 |
| --- | --- | --- |
| 한중·익주 | 14 | 한중–상용, 자귀–방릉–상용, 성도–강주, 강주–백제성–자귀–이릉, 낭중–당거 |
| 관중·양주 | 7 | 장안–동관, 낙양–동관, 장안–천수, 장안–무위, 기산도·무관도 |
| 형주·한수 | 11 | 완–상용, 신야–양양–강릉, 양양–하구, 강릉–무창·장사·무릉 |
| 하북·요동 | 9 | 업–평원–남피, 업–탁–계, 상당·정형·비호형, 계–요동, 요동–국내성 |
| 남중·교주 | 12 | 성도–주제–건녕·전지, 장사–영릉·계양, 영거·소하·기전령, 광신–남해·합포·교지 |
| 중원·서주 | 11 | 낙양–허창·완·진류, 허창–관도, 백마·여양–업, 팽성–소패·하비, 회북 연결 |
| 강동·회남 | 11 | 수춘–합비·역양, 합비–유수구–건업, 건업–오–회계·강도·예장, 무창–건업, 횡강·당리–우저 도하 |

각 경로의 경유 축·채택 근거·불확실성·원문 링크와 거점 좌표는 [ROUTE_CATALOG.md](./ROUTE_CATALOG.md)에 모두 기록합니다. 이동 기록 43개, 시대 통로 27개, 연결 추정 5개입니다. 음평도·노룡 우회·고구려 원정은 특수 원정으로 구별하며 안전한 상설 도로로 가정하지 않습니다. 서문–하이난은 연결 추정이고 夷洲를 대만으로 확정한 군사 항로는 추가하지 않았습니다.

### 한중–상용의 채택 방식

[삼국지 권40 유봉전](https://zh.wikisource.org/wiki/三國志/卷40)은 219년 유봉이 한중에서 면수를 따라 내려가 상용에서 맹달과 합류한 이동을 기록합니다. 맹달의 자귀→방릉→상용 북상도 별도 경로로 표시합니다. 지도에는 성고·양현·서성·순양 등의 한수 권역을 지리상 경유 참고점으로 넣습니다. 원문이 이 거점들을 모두 필수 경유지로 열거한 것은 아닙니다. 한수에서 상용 권역으로 갈라지는 마지막 접근과 승하선점은 추정이며 선택 시 설명합니다.

## 표시와 켜기/끄기

- 전체 스위치와 ‘전체 켜기 / 전체 끄기’ 버튼.
- 육로·수로·수륙 혼합, 연결 추정, 특수 원정의 필터.
- ‘지역별·개별 경로’에서 권역의 모두 켜기/끄기와 각 경로의 체크박스.
- ‘통로 찾아가기’ 선택 시 해당 경로를 켜고 확대하며 근거·불확실성·출처를 표시. ‘선택한 경로만 표시’는 나머지 선·경유점·보호 격자를 숨김.
- ‘경유 성·관문·나루 표시’로 추가 거점 표시를 켜기/끄기. 기본 도시·관문과 중복되는 곳은 기존 표식을 사용. 확대하거나 경로를 선택하면 작은 경유지 이름을 표시하고 겹침을 완화.

갈색은 육로, 청색은 수로, 회색은 연결 추정선, 옅은 금색은 선택 경로입니다. 혼합 경로는 구간별로 육로와 수로 색을 나누어 표시합니다. 수로를 끄면 ‘수로’ 유형 전체가 숨겨지며 혼합 경로의 수로 구간은 ‘수륙 혼합’ 필터로 함께 제어합니다.

### 이릉의 병행 육로와 수로

[선주전](https://zh.wikisource.org/wiki/三國志/卷32)은 222년 오반·진식의 수군이 이릉에 주둔하고 유비가 자귀에서 산길을 따라 이도·효정으로 진군했다고 기록합니다. 황권의 강북군도 따로 기록합니다. [육손전](https://zh.wikisource.org/wiki/三國志/卷58)은 처음 수륙 병진하던 군대가 배를 버리고 보병 진영을 설치한 상황과 화공을 기록합니다.

기존 자료가 이 전선을 mixed로 분류하면서 수로 축만 그리던 문제를 보완했습니다. 수로 주 좌표열과 자귀–이도·효정 강남 육로의 병행 좌표열을 함께 표시합니다. 육로는 256 격자에서 참고 타일 10개로 연결하며 모두 원본 육상 규칙에서 이동 가능함을 검증했습니다. 산지 기복에도 이 타일의 경계를 유지합니다. 선택 강조가 두 경로의 색을 덮지 않아 청색 수로·갈색 육로를 구분할 수 있습니다.

육로의 개별 산길과 전장 점은 권역 근사이며 효정 전장 비정의 이설을 남깁니다. [송걸의 역사 지리 연구](https://cssn.cn/lsx/lsx_zgs/202210/t20221024_5552501.shtml)를 함께 참고하며 현대 효정구·관광지와 고대 전장을 동일시하지 않습니다. 숲 분포와 실제 진영의 범위는 고도만으로 복원하지 않습니다. 현재 댐·저수지의 강폭도 고대 물길의 폭이 아닙니다.

## 기존 산악 통로의 채택 경유지

| 통로 | 주요 연결 | 채택 근거와 주의점 |
| --- | --- | --- |
| 진창도 | 진창·대산관—봉현·양당—하치·약양—면현·한중 | 산관을 거친 제갈량의 진창 공격과 서쪽 계곡 통로. 당대 연운도 지름길 제외 |
| 포사도 | 한중—포곡·마도·강구—태백·사곡—오장원 | 제갈량의 사곡 출병. 원정별 분기까지 동일한 선으로 단정하지 않음 |
| 당락도 | 한중·양현—화양—낙곡·주지 | 양현 문화관의 주중경 답사 연구 및 삼국지 낙곡 기록. 연구 영문판 연대 오기 제외 |
| 자오도 | 장안—자오곡·영섬—석천—양현·한중 | 한·위진 통로와 211년 이동 기록. 실행되지 않은 위연의 계책을 실제 행군으로 표시하지 않음 |
| 기산도 | 한중·면현—약양·청니—무도·서한수—기산·천수 | 북벌 경유지 자료. 무도·서현 권역 근사, 가정의 논쟁적인 위치 제외 |
| 금우도 | 한중—면현·영강·백수—가맹·검각—자동·부성·성도 | 촉의 주간 통로와 유비의 군사 행동. 영강~가맹은 백수 경유 고노선 근사 |
| 미창도 | 한중·남정—미창산—남강·파중 | 한중 지방지의 남정 경유지. 여러 지선 중 하나이며 당거 행군 전체의 단정은 제외 |
| 음평도 | 음평—마천령·청계—강유관—부성·면죽·성도 | 263년 등애의 특수 우회 원정. 개척·보급난을 겪은 길이며 안전한 상설 도로와 구별 |
| 무관도 | 장안·남전—상락·무관·단강—남양·형양 | 진·한 이후 주요 통로. 무관의 시대별 위치 이설과 선형 근사 명시 |
| 형양 통로 | 남양·신야—번성·양양—당양·강릉 | 삼국 시대 형양·남군 전선. 한수 도하점·강릉 세부 위치 근사 |
| 태항형 | 심양—고양장판·천정관—고평·상당 | 조조의 고간 토벌과 연결되는 고도. 후대 완자성 시설은 추가하지 않음 |

옅은 금색 육각 윤곽은 표시 경로의 육로 보호 타일입니다. 경로 스위치·종류·지역·선택 필터를 바꾸면 현재 표시하는 경로의 보호 합집합도 갱신합니다.

## 격자와 이동 규칙

기본 높이 18배에서 경계 표시 제한을 35° → **60°**로 완화했습니다. 이 각도는 실제 군대의 등판 한계가 아니라 **높이를 강조한 화면 경계의 기울기**입니다.

- 일반 타일: 경사 기준을 넘으면 격자를 숨깁니다. 그로 인해 여섯 변을 완성할 수 없는 인접 후보 타일도 경계를 전부 생략합니다. 후보 마스크에 한 번만 적용한 뒤 남은 타일의 완전한 윤곽을 생성합니다. 숨긴 타일끼리의 선과 고립된 선 조각은 생성하지 않습니다.
- 보호 타일: 경사와 인접 타일의 숨김 여부에 관계없이 **여섯 변 모두** 표시합니다. 경계는 고도를 따라 4구간으로 나누며 지형에 가려지지 않게 강조합니다.
- ‘표시한 육로의 격자 유지’를 끄면 예외 없는 경사 판정과 비교할 수 있습니다. 자동·고정·전체 표시 및 256·220·128 격자에서 지원합니다. 수로와 연결 추정 경로는 육로 보호에 포함하지 않습니다.
- 격자 표시와 게임 이동은 별도 규칙입니다. 산지는 원래 비용 5로 이동 가능하며, 수역·고산·배경·사용자 이동 금지는 별도 판정입니다. 통로의 도로 보너스·보급 능력·계절 통행 여부는 아직 부여하지 않습니다.

256 격자·18배·60°에서 전체 경로를 켜면 고유 보호 타일은 **1,024개**, 급경사 복원은 **281개**입니다. 불완전한 일반 후보 8,619개를 정리한 최종 표시 타일은 41,017개, 숨김 타일은 24,519개입니다. 경로를 일부만 표시하면 보호 범위도 줄어듭니다. 검증은 참고 타일 체인의 연결성과 실제 게임 이동 판정을 별도로 기록합니다. 수로·현대 수역·배경 구간은 육상 규칙에서 이동 불가일 수 있으며, 선을 표시했다고 자동으로 승하선이나 도하를 허용하지 않습니다.

## 자료와 재생성

| 파일 | 계약 |
| --- | --- |
| `data/historical-corridors.source.json` | 편집 원본. 한글·한자 이름, 근거 구분, 경유지 [경도, 위도, 이름], 출처, 불확실성 |
| `data/regional-routes.source.json` | 확장 경로 원본. 경유 노드의 좌표·종류, node ID 또는 권역 좌표를 잇는 path, 구간별 수로 지정, 근거와 출처 |
| `data/historical-corridors.json` | version=1, datasetId, scope=historical-grid-reference. 원본 + 투영 points, nodes, 수륙 legs, 경유점의 point 인덱스, tiles, gridTiles, 출처·마스크 경로 |
| `data/corridor-grid-{256,220,128}.bits` | 행 우선 LSB-first 비트셋. 1=보호. 각각 8,192 / 6,050 / 2,048 bytes |
| `src/domain/route-network.js` | 엔진 독립 필터·경유점 조회·보호 합집합 |
| `src/ui/historical-route-controls.js` | 지역·개별 체크 상태와 입력 어댑터 |
| `src/rendering/historical-corridor-layer.js` | 참고선·경유 거점·이름·타일별 통로 조회를 담당하는 웹 어댑터 |

`mode`는 land/water/mixed, `evidenceLevel`은 campaign/period/inferred입니다. `special`은 특수 원정 여부입니다. `nodeIds`는 경유 지명, `waypoints`는 원본 권역 좌표, `points`는 렌더링 좌표입니다. `waypointPointIndices`가 두 좌표열을 연결합니다. `legs`는 fromPoint/toPoint, fromWaypoint/toWaypoint, mode, alignment, gridProtected를 갖습니다. `tiles[size]`는 주 좌표열의 순서 있는 참고 체인입니다. 원본의 `parallelPaths[]`는 독립된 points·legs·tiles·gridTiles를 갖는 `branches[]`로 생성됩니다. 부모의 `gridTiles[size]`는 주 경로와 병행 육로를 합친 고유 보호 ID입니다. 각 체인은 별도로 연결되며 병행 경로끼리 가상의 선분을 만들지 않습니다. `referencePaths()`로 모든 좌표열을 조회합니다.

사전 생성 시 경유 권역 사이 또는 채택한 현대 하천 참고 선형을 2km 이하로 샘플링해 가까운 육각 타일을 연결합니다. 경계 수치 오차로 이웃이 건너뛰면 육각 이웃 연결을 삽입합니다. 보호 폭은 타일 1열 정도의 게임 표시 폭이며 실제 도로 폭을 뜻하지 않습니다. JSON은 약 **243 KiB**(gzip 약 **65 KiB**), 전체 격자 보호 비트셋은 16,290 bytes입니다. 런타임은 현재 표시한 경로의 gridTiles 합집합을 메모리에서 만들고 캐시합니다. 자료 재생성에는 네트워크가 필요하지 않습니다.

```powershell
node tools/build_corridors.mjs
node tools/document_routes.mjs
node tools/verify-corridors.mjs
node tools/verify-grid.mjs
```

자료 생성에는 네트워크·Three.js·Godot이 필요하지 않습니다. 전체 상세 지형 재생성 파이프라인도 마지막에 통로 자료를 다시 생성합니다. Godot으로 이전할 때 JSON과 비트셋, 육각 ID·투영 계약을 사용하고 표시 어댑터만 교체할 수 있습니다.

## 검증 결과

`exports/corridor-validation.json`은 세 격자의 체인 인접성·경유지 포함·육로 보호 합집합, 노드·구간·출처 일관성, 전체 기본 지명 포함, 표시 필터, 수로·추정 보호 제외, 원본 육상 이동 판정을 기록합니다. `exports/grid-validation.json`은 숨겨진 쪽이 공유 변 소유자인 경우에도 보호 타일의 여섯 변이 남는지 검사합니다. 브라우저의 전체·지역·개별·종류·추정·특수·경유점 스위치와 단일 경로 확대는 `exports/route-browser-validation.json`에 기록합니다.

## 주요 원문

- [한중 한태구 정부: 한중 잔도와 진령 고도](https://www.htq.gov.cn/hzshtqzf/zjht/lswh/201703/01718974180a46c6a060771a9df6a9fd.shtml)
- [한중 한태구 정부: 포사 잔도 경유지](https://www.htq.gov.cn/hzshtqzf/zjht/lswh/202104/ad1c853e723f40e68b72aa961214665e.shtml)
- [양현 문화관 주중경: 당락도 답사 연구](https://qinshuroads.org/docs/PDF/Zhou_Zhongqing_TLD_Paper_En_Ch.pdf)
- [섬서 지방지: 섬서 고대 도로 교통사](https://dfz.shaanxi.gov.cn/zslm/fzzlk/dqcs/201706/P020240924618924160653.pdf)
- [한중 지방지: 미창도 경유지](https://dfz.shaanxi.gov.cn/zslm/fzzlk/xbsxsxz/xbsxz/hzs_16205/201405/P020240923624266980203.pdf)
- [국가 민족사무위원회: 고촉도 전문가 인터뷰](https://www.neac.gov.cn/seac/c103391/202308/1166797.shtml)
- [성고현 지방지: 음평도와 등애전 교주](https://dfz.shaanxi.gov.cn/zslm/fzzlk/sxjz/hzs_16205/201706/P020240923599199744676.pdf)
- [진성시 정부: 태항형 답사](https://www.jcgov.gov.cn/mljc/lswh/whys/whhd/202010/t20201023_1249383.shtml)

나머지 원문도 통로별 `sources`에 연결되어 있으며 웹에서 해당 통로를 선택해 확인할 수 있습니다.
