1. PHP 파일
php 파일은 html 파일에서 호출하는 show_landprice.php 파일과 사용자 정의함수가 들어 있는 vword_function.php 2개입니다.
2. 주소 JSON 파일의 구조
Geocoder API 2.0에서 제공하는 정보에 주소(아래 표에서 text)만 있는 줄 알았더니
zipcode와 법정동 코드인 level4LC가 있어서, data.go.kr을 이용하지 않고, 이것을 이용하겠습니다.
그리고, 동호수가 detail에 있어서 이것도 이용했습니다.
3. 간단한 코드 설명
가. show_landprice.php
(1) include로 파일을 불러옴
include는 다른 언어의 import와 유사한 기능입니다.
// 변수($VworldKey) 지정 파일 불러오기 include "./wp-admin/config.php"; // 사용자 정의 함수 불러오기 include "vworld_function.php"; |
config.php 파일에 자주 사용하는 변수를 넣어놓습니다.
여기서 $vworldKey와 $domain 변수를 이용하는데,
아래와 같은 내용으로 들어가 있습니다.
<?php $vworldKey='vworld 인증키'; $domain='활용신청시 작성한 도메인 주소'; ?> |
vworld_function.php는 주소와 법정동 코드를 불러오고, 개별공시지가를 조회해서 반환하는 사용자 정의 함수가 들어 있습니다.
show_landprice.php의 아래에 사용자 정의 함수를 놓아도 되지만, 깔끔하게 정리하기 위해서 파일을 분리한 것입니다.
(2) Get 방식을 전달한 변수를 PHP 변수에 저장
// get으로 가져온 인수를 php로 불러오기 $coord = isset($_GET['coord']) ? $_GET['coord'] : ''; |
? 다음의 인수는 Get방식이므로 위와 같이 불러와서 $coord라는 php 변수에 대입합니다.
(3) $coord에서 위, 경도를 가져옴
$coord1 = explode(',', $coord); $lat = $coord1[1]; //위도 $lng = $coord1[0]; //경도 |
explode 함수는 구분자(여기서는 콤마)를 기준으로 문자열을 분리하는 기능을 합니다.
(4) 지번 주소, 법정동 코드 등을 가져옴
// 지번 주소, 도로명 주소, 세부 주소, 우편번호, 법정동 코드 구하기 [$jibun_addr, $road_addr, $donghosu, $zipcode, $regionCd] = getAddr($coord, $vworldKey); |
getAddr($coord, $vworldKey)로 주소와 관련된 정보를 가져오는데 여러 가지가 있으므로 배열로 반환(return)하고, 배열로 받습니다.
getAddr 함수로 전달하는 인자는 $coord와 $vworldKey입니다.
(5) PNU 만들기
// 주소를 가|로|동|리로 구분해서 나누기 preg_match('/^(.*[가|로|동|리])\s+(.*)$/u', $jibun_addr, $matches); $dong = $matches[1]; $jibun= $matches[2]; // PNU(고유번호) 구하기 $sanYN = strpos($jibun,'산') === false ? '1' : '2'; $numbers = explode('-', trim(str_replace('산', '', $jibun))); $bonbun = str_pad($numbers[0], 4, '0', STR_PAD_LEFT); $bubun = $numbers[1] ? str_pad($numbers[1], 4, '0', STR_PAD_LEFT) : '0000'; $pnu = $regionCd . $sanYN . $bonbun . $bubun; |
지번 주소를 '가, 로, 동, 리'를 기준으로 2개로 분리하는데,
0번째는 전체 주소이고, 1번째는 가, 로, 동, 리까지이고, 2번째는 지번입니다.
지번에는 '산'이 있는지 여부를 판단해서 필지구분(여기서는 $sanYN)을 구하고,
본번과 부번을 앞에 0을 붙여 4자리 숫자로 만듭니다.
그런데 지번이 '산 1-1식'으로 strpos로 '산'을 찾으면 '산'이 있을 때도 0, 없을 때도 false라 0이 되므로, 구분하기 위해서 없을 때를 === false라고 해야 합니다.
'산 1-1'에서 '산'을 제외한 지번만을 추출할 때도 '산'을 빈칸('')으로 바꾼 다음 trim을 이용해 좌우 공백을 제거했습니다.
그리고, 법정동코드와 필지구분, 본번, 부번을 연결하면 PNU가 됩니다.
(6) 개별공시지가 구하기
// 개별공시지가 구하기 [$year, $landprice] = getLandPrice($pnu, $vworldKey, $domain); |
개별공시지가는 vworld_function.php에 있는 getLandPrice 함수를 이용해서 구하는데, 위에서 만든 $pnu와 $vworldKey뿐만 아니라 아래 설명처럼 domain 정보도 넘겨야 하므로 $domain을 인수에 추가했습니다.
(7) 화면에 표시할 문장 구성
// div 태그에 표시할 내용 구성하기 echo "- 지번 주소: " . $jibun_addr .($zipcode ? ' (우편번호: ' . $zipcode . ')' : '') .($road_addr ? "<br> (도로명 주소: " . $road_addr . ")" : '') .($donghosu ? " (" . $donghosu . ")" : "") ."<br>- 위도: ". $lat . ', 경도: ' . $lng ."<br>- 개별공시지가: ". number_format($landprice,0) ."원/㎡"; |
echo 함수를 이용해 화면에 표시하는데,
문자열을 연결하는 함수는 .(마침표)입니다.
"- 지번 주소: " . $jibun_addr
: '- 지번 주소' 다음에 $jibun_addr(지번 주소)를 표시합니다.
[3항 연산자 이용 도로명 주소 등 표시]
php에서 3항 연산자는
조건 ? 참일 때의 값 : 거짓일 때의 값
과 같이 사용합니다.
조건에 따라 참일 때 값과 거짓일 때 값으로 한 줄에 표현합니다.
($zipcode ? ' (우편번호: ' . $zipcode . ')' : '')
.($road_addr ? "<br> (도로명 주소: " . $road_addr . ")" : '')
.($donghosu ? " (" . $donghosu . ")" : "")
위 구문은 $zipcode(우편번호), $road_addr(도로명 주소)와 $donghosu(상세 주소)가 있는지 여부를 판단해서 있을 때만 표시하는 것입니다.
(지번 주소, 우편번호, 도로명 주소, 세부정보가 모두 있는 경우)
(지번 주소, 우편번호만 있는 경우)
(지번 주소만 있는 경우)
vworld_function.php는 다음 편에서 설명하겠습니다.
'Map(WEB)' 카테고리의 다른 글
VWorld의 WMS, WFS 기능 구현 (0) | 2025.03.27 |
---|---|
vworld 지도 만들기(17) - 개별공시지가 표시하기(5) : PHP(3) (0) | 2025.03.07 |
vworld 지도 만들기(15) - 개별공시지가 표시하기(3) : PHP(1) (0) | 2025.03.05 |
vworld 지도 만들기(14) - 개별공시지가 표시하기(2) : JSONP (0) | 2025.03.04 |
vworld 지도 만들기(13) - 개별공시지가 표시하기(1) : JavaScript (2) | 2025.03.03 |