오픈 api 연동

오픈 api 연동

QA

오픈 api 연동

본문

선배님들 안녕하세요 공간정보포털에서 오픈 api를 웹사이트에 연동시키려고 하는데

사진처럼 깨져서 나옵니다..

 

어떤 문제일까요..

3076557694_1700545856.2119.png


<?php
    
$ch = curl_init();    
$url = "http://openapi.nsdi.go.kr/nsdi/RoadService/wms/getRoadBaseMapUTMK"; /*URL*/    
$queryParams = '?' . urlencode('authkey') . '=dd6be51ac589565fb244c5'; /*Service Key*/    
    $queryParams .= '&' . urlencode('layers') . '=' . urlencode('0'); /* 화면에 표출할 레이어명의 나열, 값은 쉼표로 구분 */  
    $queryParams .= '&' . urlencode('crs') . '=' . urlencode('EPSG:5179'); /* 좌표 체계(산출물을 위한 SRS) */  
    $queryParams .= '&' . urlencode('bbox') . '=' . urlencode('951940,1949403,960041,1956098'); /* 크기(extent)를 정의하는 범위(bounding box) */  
    $queryParams .= '&' . urlencode('width') . '=' . urlencode('915'); /* 반환 이미지의 너비(픽셀) */  
    $queryParams .= '&' . urlencode('height') . '=' . urlencode('700'); /* 반환 이미지의 높이(픽셀) */  
    $queryParams .= '&' . urlencode('format') . '=' . urlencode('image/png'); /* 반환 이미지 형식(image/png 또는 image/jpeg 또는 image/gif) */  
    $queryParams .= '&' . urlencode('transparent') . '=' . urlencode('false'); /* 반환 이미지 배경의 투명 여부(true 또는 false[기본값]) */  
    $queryParams .= '&' . urlencode('bgcolor') . '=' . urlencode('0xFFFFFF'); /* 반환 이미지의 배경색(0xRRGGBB) */  
    $queryParams .= '&' . urlencode('exceptions') . '=' . urlencode('blank'); /* 예외 발생 시 처리 방법(blank 또는 xml 또는 inimage) */  
    
    
curl_setopt($ch, CURLOPT_URL, $url . $queryParams);    
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);    
curl_setopt($ch, CURLOPT_HEADER, FALSE);    
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');    
$response = curl_exec($ch);    
curl_close($ch);         
echo $response;
?> 

이 질문에 댓글 쓰기 :

답변 2

다음과 같은 방법으로 시도해 볼 수 있을 것 같습니다.


<?php
$ch = curl_init();
$url = "http://openapi.nsdi.go.kr/nsdi/RoadService/wms/getRoadBaseMapUTMK"; /*URL*/
$queryParams = '?' . urlencode('authkey') . '=dd6be51ac589565fb244c5'; /*Service Key*/
$queryParams .= '&' . urlencode('layers') . '=' . urlencode('0'); /* 화면에 표출할 레이어명의 나열, 값은 쉼표로 구분 */
$queryParams .= '&' . urlencode('crs') . '=' . urlencode('EPSG:5179'); /* 좌표 체계(산출물을 위한 SRS) */
$queryParams .= '&' . urlencode('bbox') . '=' . urlencode('951940,1949403,960041,1956098'); /* 크기(extent)를 정의하는 범위(bounding box) */
$queryParams .= '&' . urlencode('width') . '=' . urlencode('915'); /* 반환 이미지의 너비(픽셀) */
$queryParams .= '&' . urlencode('height') . '=' . urlencode('700'); /* 반환 이미지의 높이(픽셀) */
$queryParams .= '&' . urlencode('format') . '=' . urlencode('image/png'); /* 반환 이미지 형식(image/png 또는 image/jpeg 또는 image/gif) */
$queryParams .= '&' . urlencode('transparent') . '=' . urlencode('false'); /* 반환 이미지 배경의 투명 여부(true 또는 false[기본값]) */
$queryParams .= '&' . urlencode('bgcolor') . '=' . urlencode('0xFFFFFF'); /* 반환 이미지의 배경색(0xRRGGBB) */
$queryParams .= '&' . urlencode('exceptions') . '=' . urlencode('blank'); /* 예외 발생 시 처리 방법(blank 또는 xml 또는 inimage) */
curl_setopt($ch, CURLOPT_URL, $url . $queryParams);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$response = curl_exec($ch);
curl_close($ch);
// 추가된 부분 1: 이미지 형식을 명시적으로 설정
header("Content-type: image/png");
// 추가된 부분 2: 이미지를 base64로 인코딩하여 출력
$base64Image = base64_encode($response);
echo '<img src="data:image/png;base64,'.$base64Image.'" />';
// 추가된 부분 3: 콘텐츠 길이 지정
header('Content-Length: ' . strlen($response));
// 추가된 부분 4: 캐싱 헤더 설정
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
?>

 

이렇게 하면 이미지가 base64로 인코딩되어 출력되며, 이미지의 형식이 명시적으로 설정되어 화면 깨짐 문제를 해결할 수 있을 것으로 생각합니다.

지금 가져오는건 png 이미지인듯 한데요

이건 이미지 파일로 인식되도록 header에

header('Content-Type: image/png');

선언을 하셔서 이미지로 처리해 주셔야 하는 부분입니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

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