사진 등록 UI 를 보완

This commit is contained in:
2026-08-23 03:21:54 +09:00
parent a5a1b2a2a2
commit 13905babf3
4 changed files with 429 additions and 95 deletions
+13
View File
@@ -71,6 +71,19 @@ app.get('/api/dongs', async (req, res) => {
}
});
app.get('/api/reverse-geocode', async (req, res) => {
const numLat = Number(req.query.lat);
const numLng = Number(req.query.lng);
if (!Number.isFinite(numLat) || !Number.isFinite(numLng)) {
return res.status(400).json({ error: 'lat, lng 파라미터가 필요합니다.' });
}
try {
res.json(await reverseGeocode(numLat, numLng));
} catch (e) {
res.status(502).json({ error: e.message });
}
});
app.get('/api/poles', async (req, res) => {
const { gu = '', dong = '', start = '', end = '' } = req.query;
try {
+11 -23
View File
@@ -1,4 +1,5 @@
const VWORLD_ENDPOINT = 'https://api.vworld.kr/req/data';
const VWORLD_ADDRESS_ENDPOINT = 'https://api.vworld.kr/req/address';
function credentials() {
return {
@@ -80,31 +81,18 @@ export async function reverseGeocode(lat, lng) {
domain,
});
const res = await fetch(`${VWORLD_ENDPOINT}?${params}`);
const res = await fetch(`${VWORLD_ADDRESS_ENDPOINT}?${params}`);
if (!res.ok) throw new Error(`VWorld 지오코딩 실패 (HTTP ${res.status})`);
const json = await res.json();
const result = json.response?.result;
const response = json.response;
if (response?.status !== 'OK') return { gu: '', dong: '' };
if (!result?.text) return { gu: '', dong: '' };
const first = Array.isArray(response.result) ? response.result[0] : response.result;
const structure = first?.structure;
if (!structure) return { gu: '', dong: '' };
const text = result.text;
const structure = result.structure;
let gu = '';
let dong = '';
if (structure) {
gu = structure.level1 || '';
dong = structure.level2 || '';
} else {
const parts = text.split(' ');
if (parts.length >= 2) {
gu = parts[0];
dong = parts[1];
} else if (parts.length === 1) {
gu = parts[0];
}
}
return { gu, dong };
return {
gu: structure.level2 || '',
dong: structure.level3 || structure.level4L || '',
};
}