[Project] 야숨 지도. 지도 asset 다운로드하기

2025. 7. 29. 22:32·Project

https://objmap.zeldamods.org/game_files/maptex/{z}/{x}/{y}.png

주소에서 이미지를 다운로드 해야하는데 그 양이 어마어마하다.

z x y
0 0 0
1 0 0
  0 1
  1 0
  1 1
2 0 0
  0 1
  0 2
  1 0
  1 1
  1 2
  2 0
  2 1
  2 2

등등 이거를 z가 7까지 수행하면서 다운로드해야 zoom을 땡겼을 때도 정상적인 지도가 나온다.

 

하나씩 다운로드 하기에는 노가다라서 한꺼번에 지도를 다운로드해서 저장하는 파일을 만들어보자.

 

z: 0, x: 0, y: 0

z: 1, x: 1, y: 1

z: 2, x: 2, y: 2

z: 3, x: 5, y: 4

z: 4, x: 11, y: 9

z: 5, x: 23, y: 19

z: 6, x: 46, y: 39

z: 7, x: 93, y: 78

 

import { promises as fs } from "fs";
import path from "path";

const BASE_DIR = path.join(process.cwd(), "public", "hyrule", "tile");

async function downloadTile(z, x, y) {
  const url = `https://objmap.zeldamods.org/game_files/maptex/${z}/${x}/${y}.png`;

  const saveDir = path.join(BASE_DIR, z.toString(), x.toString());
  await fs.mkdir(saveDir, { recursive: true }); // recursive: true를 주는것이 더 안정적

  const savePath = path.join(saveDir, `${y}.webp`);

  try {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error(`HTTP ${response.status} - ${response.statusText}`);
    }

    const buffer = Buffer.from(await response.arrayBuffer());
    await fs.writeFile(savePath, buffer);

    console.log(`✅ Saved: ${savePath}`);
  } catch (error) {
    console.error(`❌ Failed: ${url} (${error})`);
  }
}

async function main() {
	const zoomLevels = [
        { z: 0, maxX: 0, maxY: 0 },
        { z: 1, maxX: 1, maxY: 1 },
        { z: 2, maxX: 2, maxY: 2 },
        { z: 3, maxX: 5, maxY: 4 },
        { z: 4, maxX: 11, maxY: 9 },
        { z: 5, maxX: 23, maxY: 19 },
        { z: 6, maxX: 46, maxY: 39 },
        { z: 7, maxX: 93, maxY: 78 }
	];
    
    for (const {z, maxX, maxY} of zoomLevels) {
    	for (let x = 0; x <= maxX; x++) {
        	for (ley y = 0; y <= maxY; y++) {
            	await downloadTile(z, x, y)
            }
        }
    }
}

파일을 다운로드하는데 굉장히 오래 걸린당

손수 했으면 며칠 걸렸을 듯

'Project' 카테고리의 다른 글

[Project] 야숨 지도. 지도 생성하기 w. Leaflet  (0) 2025.07.29
[Project] 야숨 지도. 파비콘을 추가해보자. w. Next.js  (2) 2025.07.26
'Project' 카테고리의 다른 글
  • [Project] 야숨 지도. 지도 생성하기 w. Leaflet
  • [Project] 야숨 지도. 파비콘을 추가해보자. w. Next.js
rubato.dev
rubato.dev
  • rubato.dev
    rubato.dev
    rubato.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (36) N
      • BOJ (28)
      • 알고리즘 (4)
      • TIL (1) N
      • Project (3) N
  • 인기 글

  • 태그

    dp
    Algorithm
    BFS
    TIL
    Next.js
    PYTHON
    stack
    스택
    PriorityQueue
    BOJ
    Zelda
    Project
    DFS
    CSS
    backtracking
    투 포인터
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
rubato.dev
[Project] 야숨 지도. 지도 asset 다운로드하기
상단으로

티스토리툴바