오픈 api 연동

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
오픈 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