오픈 api 연동
본문
선배님들 안녕하세요 공간정보포털에서 오픈 api를 웹사이트에 연동시키려고 하는데
사진처럼 깨져서 나옵니다..
어떤 문제일까요..
<?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');
선언을 하셔서 이미지로 처리해 주셔야 하는 부분입니다.
답변을 작성하시기 전에 로그인 해주세요.