네이버지도 Static Map 사용에 관해

네이버지도 Static Map 사용에 관해

QA

네이버지도 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] .
          "&center=" . $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' => '파일 저장 실패. 디렉토리 권한을 확인하세요.']);
}
?>

이 질문에 댓글 쓰기 :

답변을 작성하시기 전에 로그인 해주세요.
전체 129,672 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT