네이버지도 Static Map 사용에 관해
본문
안녕하세요. 오늘도 고생이 많으신 선생님 여러분!
제미나이가 알려준 방식으로 지도를 저장하기 위한 코드가 안먹히는 것 같아 문의 드립니다.
에러메세지로 "네이버 Static Map API 호출 실패. Client ID/Secret을 확인하세요."가 뜨는데 이해가 안돼서요.
무엇이 문제일까요?
<?php
header('Content-Type: application/json');
// ⭐ 1. 네이버 Client ID 및 Secret 설정 (필수!)
define('NAVER_CLIENT_ID', 'YOUR_NAVER_CLIENT_ID');
define('NAVER_CLIENT_SECRET', 'YOUR_NAVER_CLIENT_SECRET');
// 2. POST 데이터 수신
$centerLat = $_POST['center_lat'] ?? null;
$centerLng = $_POST['center_lng'] ?? null;
$zoomLevel = $_POST['zoom_level'] ?? null;
$userLat = $_POST['latitude'] ?? null;
$userLng = $_POST['longitude'] ?? null;
if (!$centerLat || !$centerLng || !$zoomLevel) {
echo json_encode(['success' => false, 'message' => '필수 지도 데이터가 누락되었습니다.']);
exit;
}
// 3. Static Map API URL 조합
$mapSize = '640x360'; // 이미지 크기 설정
$marker = '';
$logMessage = '';
if ($userLat !== 'unavailable' && $userLng !== 'unavailable') {
// 사용자 위치가 유효하면 마커 정보 추가
// markers=type:flag,size:mid,label:현재위치|위도,경도
$marker = "&markers=type:mid,label:M|{$userLng},{$userLat}";
$logMessage = "Lat: {$userLat} / Lng: {$userLng}";
} else {
$logMessage = "위치 정보 없음";
}
// 네이버 Static Map API URL (center: 경도, 위도 순서임에 주의!)
$apiUrl = "https://naveropenapi.apigw.ntruss.com/map-static/v2/raster" .
"?w=" . explode('x', $mapSize)[0] .
"&h=" . explode('x', $mapSize)[1] .
"¢er=" . $centerLng . "," . $centerLat .
"&level=" . $zoomLevel .
$marker;
// 4. 이미지 파일 다운로드 및 저장 설정
$uploadDir = 'naver_map_captures/'; // 저장 디렉토리 변경 (쓰기 권한 필요)
if (!is_dir($uploadDir)) { mkdir($uploadDir, 0777, true); }
$filename = 'naver_static_' . time() . '_' . rand(1000, 9999) . '.png';
$filePath = $uploadDir . $filename;
// 5. cURL을 사용하여 이미지 다운로드 (Client ID를 헤더에 포함)
$ch = curl_init($apiUrl);
// ⭐ 네이버 API는 헤더를 통해 인증합니다.
$headers = array(
'X-NCP-APIGW-API-KEY-ID: ' . NAVER_CLIENT_ID,
'X-NCP-APIGW-API-KEY: ' . NAVER_CLIENT_SECRET // 시크릿 키를 사용하는 API 유형일 경우 사용
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // SSL 오류 방지
$imageData = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlError = curl_error($ch);
curl_close($ch);
if ($httpCode !== 200 || $imageData === false) {
echo json_encode([
'success' => false,
'message' => '네이버 Static Map API 호출 실패. Client ID/Secret을 확인하세요.',
'http_code' => $httpCode,
'curl_error' => $curlError
]);
exit;
}
// 6. 파일 저장 및 로그 기록 (생략)
if (file_put_contents($filePath, $imageData)) {
echo json_encode([
'success' => true,
'message' => '네이버 Static Map 이미지와 위치가 성공적으로 저장되었습니다.',
'filename' => $filename
]);
} else {
echo json_encode(['success' => false, 'message' => '파일 저장 실패. 디렉토리 권한을 확인하세요.']);
}
?>