테스트 사이트 - 개발 중인 베타 버전입니다

오픈 api 연동 채택완료

kooky 1년 전 조회 1,877

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

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

 

어떤 문제일까요..

</p>

<p><?php

    

$ch = curl_init();    

$url = "<a href="http://openapi.nsdi.go.kr/nsdi/RoadService/wms/getRoadBaseMapUTMK";" target="_blank" rel="noopener noreferrer">http://openapi.nsdi.go.kr/nsdi/RoadService/wms/getRoadBaseMapUTMK";</a> /*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);         </p>

<p>echo $response;

?> </p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트

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

</p>

<p><?php

$ch = curl_init();

$url = "<a href="http://openapi.nsdi.go.kr/nsdi/RoadService/wms/getRoadBaseMapUTMK";" target="_blank" rel="noopener noreferrer">http://openapi.nsdi.go.kr/nsdi/RoadService/wms/getRoadBaseMapUTMK";</a> /*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) */</p>

<p>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);</p>

<p>// 추가된 부분 1: 이미지 형식을 명시적으로 설정

header("Content-type: image/png");</p>

<p>// 추가된 부분 2: 이미지를 base64로 인코딩하여 출력

$base64Image = base64_encode($response);

echo '<img src="data:image/png;base64,'.$base64Image.'" />';</p>

<p>// 추가된 부분 3: 콘텐츠 길이 지정

header('Content-Length: ' . strlen($response));</p>

<p>// 추가된 부분 4: 캐싱 헤더 설정

header('Cache-Control: no-cache, no-store, must-revalidate');

header('Pragma: no-cache');

header('Expires: 0');

?>

 

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

k
kooky
1년 전
너무 감사합니다!!!

댓글을 작성하려면 로그인이 필요합니다.

플라이
1년 전

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

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

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

k
kooky
1년 전
너무 감사합니다!!!

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인