728x90

건축데이터 민간개방 시스템 https://open.eais.go.kr/main/main.do 사이트에서 자료를 받는 방법이다.

 

 

 

건축물대장 표제부 데이터 크기가 너무 커서 EditPlus 와 같은 툴로 편집할 수가 없다. 그래서 리눅스에 파일을 올리고 파일 분할을 한 다음에 다시 EditPlus로 열어 인코딩 모드를 ANSI 에서 UTF8로 변경 저장해야 한다. 안그러면 한글이 깨져 업로드된다.

설명의 엑셀 파일을 다운로드 해서 순서대로 테이블을 설계한 것이 아래 코드이다.

 

건축물대장 표제부 데이터를 일괄 업로드하는 방법이다.

테이블 설계하는 것은 아래 제시한 것으로 이용하면 된다.

수도권 데이터만 필요해서 업로드 후 나머지 데이터는 삭제 처리했다.

준공일자가 잘못 나온 것도 모두 삭제처리했다.

 

######################################################################################
건축물대장 표제부
######################################################################################
cd /home/httpd/htdocs/sample/uploads
split -n l/3 ---additional-suffix=.txt mart_djy_03.txt djypart_
 
# editplus 에디터 툴로 열어서 ANSI 를 UTF8 로 변경하여 저장한다.
 
mysql -uroot -p
SHOW VARIABLES LIKE 'character_set%';
 
use testdb;
 
CREATE TABLE djy_blding_tsect (
  pkCode varchar(33NOT NULL COMMENT '관리건축물대장PK',
  regstrGbCd varchar(1DEFAULT NULL COMMENT '대장구분코드',
  regstrGbCdNm varchar(100DEFAULT NULL COMMENT '대장구분코드명',
  regstrKindCd varchar(1DEFAULT NULL COMMENT '대장종류코드',
  regstrKindCdNm varchar(100DEFAULT NULL COMMENT '대장종류코드명',
  jiAddress varchar(230NOT NULL COMMENT '대지위치',
  stAddress varchar(230DEFAULT NULL COMMENT '도로명대지위치',
  bldNm varchar(100DEFAULT NULL COMMENT '건물명',
  sigunguCd varchar(5NOT NULL COMMENT '시군구코드',
  bjdongCd varchar(5NOT NULL COMMENT '법정동코드',
  platGbCd char(1NOT NULL DEFAULT '0' COMMENT '대지구분코드',
  bun varchar(4NOT NULL COMMENT '번',
  ji varchar(4NOT NULL COMMENT '지',
  splotNm varchar(200DEFAULT NULL COMMENT '특수지명',
  block varchar(20DEFAULT NULL COMMENT '블록',
  lot varchar(20DEFAULT NULL COMMENT '로트',
  bylotCnt int(11DEFAULT 0 COMMENT '외필지수',
  naRoadCd varchar(12DEFAULT NULL COMMENT '새주소도로코드',
  naBjdongCd varchar(5DEFAULT NULL COMMENT '새주소법정동코드',
  naUgrndCd char(1DEFAULT '0' COMMENT '새주소지상지하코드',
  naMainBun int(11DEFAULT NULL COMMENT '새주소본번',
  naSubBun int(11DEFAULT NULL COMMENT '새주소부번',
  dongNm varchar(100DEFAULT NULL COMMENT '동명칭',
  mainAtchGbCd char(1DEFAULT '0' COMMENT '주부속구분코드',
  mainAtchGbCdNm varchar(100DEFAULT NULL COMMENT '주부속구분코드명',
  platArea double NOT NULL DEFAULT 0 COMMENT '대지면적(㎡)',
  archArea double NOT NULL DEFAULT 0 COMMENT '건축면적(㎡)',
  bcRat double NOT NULL DEFAULT 0 COMMENT '건폐율(%)',
  totArea double NOT NULL DEFAULT 0 COMMENT '연면적(㎡)',
  vlRatEstmTotArea double NOT NULL DEFAULT 0 COMMENT '용적률산정연면적(㎡)',
  vlRat double NOT NULL DEFAULT 0 COMMENT '용적률(%)',
  strctCd char(1DEFAULT NULL COMMENT '구조코드',
  strctCdNm varchar(100DEFAULT NULL COMMENT '구조코드명',
  etcStrct varchar(500DEFAULT NULL COMMENT '기타구조',
  mCode int(11DEFAULT NULL COMMENT '주용도코드',
  mCodeNM varchar(100DEFAULT NULL COMMENT '주용도코드명',
  etcType text DEFAULT NULL COMMENT '기타용도',
  roofCd varchar(2DEFAULT NULL COMMENT '지붕코드',
  roofCdNm varchar(100DEFAULT NULL COMMENT '지붕코드명',
  etcRoof varchar(500DEFAULT NULL COMMENT '기타지붕',
  hhldCnt int(11DEFAULT 0 COMMENT '세대수(세대)',
  fmlyCnt int(11DEFAULT 0 COMMENT '가구수(가구)',
  heit double NOT NULL DEFAULT 0 COMMENT '높이(m)',
  gFlrCnt int(5DEFAULT 0 COMMENT '지상층수',
  ugFlrCnt int(2DEFAULT 0 COMMENT '지하층수',
  rideUseElvtCnt int(11DEFAULT 0 COMMENT '승용승강기수',
  emgenUseElvtCnt int(11DEFAULT 0 COMMENT '비상용승강기수',
  atchBldCnt int(11DEFAULT 0 COMMENT '부속건축물수',
  atchBldArea double NOT NULL DEFAULT 0 COMMENT '부속건축물면적(㎡)',
  totDongTotArea double NOT NULL DEFAULT 0 COMMENT '총동연면적(㎡)',
  indrMechUtcnt int(11DEFAULT 0 COMMENT '옥내기계식대수(대)',
  indrMechArea double NOT NULL DEFAULT 0 COMMENT '옥내기계식면적(㎡)',
  oudrMechUtcnt int(11DEFAULT 0 COMMENT '옥외기계식대수(대)',
  oudrMechArea double NOT NULL DEFAULT 0 COMMENT '옥외기계식면적(㎡)',
  indrAutoUtcnt int(11DEFAULT 0 COMMENT '옥내자주식대수(대)',
  indrAutoArea double NOT NULL DEFAULT 0 COMMENT '옥내자주식면적(㎡)',
  oudrAutoUtcnt int(11DEFAULT 0 COMMENT '옥외자주식대수(대)',
  oudrAutoArea double NOT NULL DEFAULT 0 COMMENT '옥외자주식면적(㎡)',
  pmsDay varchar(8DEFAULT NULL COMMENT '허가일',
  stcnsDay varchar(8DEFAULT NULL COMMENT '착공일',
  useAprDay varchar(8DEFAULT NULL COMMENT '사용승인일',
  pmsnoYear varchar(4DEFAULT NULL COMMENT '허가번호년',
  pmsnoKikCd char(7DEFAULT NULL COMMENT '허가번호기관코드',
  pmsnoKikCdNm varchar(100DEFAULT NULL COMMENT '허가번호기관코드명',
  pmsnoGbCd varchar(4DEFAULT NULL COMMENT '허가번호구분코드',
  pmsnoGbCdNm varchar(100DEFAULT NULL COMMENT '허가번호구분코드명',
  hoCnt int(11DEFAULT 0 COMMENT '호수(호)',
  engrGrade varchar(4DEFAULT NULL COMMENT '에너지효율등급',
  engrRat double DEFAULT 0 COMMENT '에너지절감율',
  engrEpi int(11DEFAULT 0 COMMENT 'EPI점수',
  gnBldGrade char(1DEFAULT NULL COMMENT '친환경건축물등급',
  gnBldCert int(11DEFAULT 0 COMMENT '친환경건축물인증점수',
  itgBldGrade char(1DEFAULT NULL COMMENT '지능형건축물등급',
  itgBldCert int(11DEFAULT 0 COMMENT '지능형건축물인증점수',
  regDate varchar(8NOT NULL COMMENT '생성일자',
  rsDsgnApplyYn char(1DEFAULT '0' COMMENT '내진설계적용여부',
  rsAblty varchar(20DEFAULT NULL COMMENT '내진능력'
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='건축물대장 표제부';
 
ALTER TABLE djy_blding_tsect
  ADD PRIMARY KEY (pkCode),
  ADD KEY jiAddress (jiAddress),
  ADD KEY jCode (sigunguCd,bjdongCd,platGbCd,bun,ji);
COMMIT;
 
 
LOAD DATA LOCAL INFILE '/home/httpd/htdocs/sample/uploads/djypart_00.txt' 
INTO TABLE djy_blding_tsect 
FIELDS TERMINATED BY '|' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
 
 
LOAD DATA LOCAL INFILE '/home/httpd/htdocs/sample/uploads/djypart_01.txt' 
INTO TABLE djy_blding_tsect 
FIELDS TERMINATED BY '|' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
 
 
LOAD DATA LOCAL INFILE '/home/httpd/htdocs/sample/uploads/djypart_02.txt' 
INTO TABLE djy_blding_tsect 
FIELDS TERMINATED BY '|' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
 
 
DELETE FROM djy_blding_tsect WHERE SUBSTRING_INDEX(jiAddress, ' '1NOT IN ('서울특별시''경기도''인천광역시');
 
# 준공일자가 8자리가 아닌 것은 모두 삭제
DELETE FROM djy_blding_tsect WHERE length(useAprDay) != 8;
 
select pkCode, max(useAprDay) from djy_blding_tsect;
 
# 준공일자가 현재 날짜보다 큰 숫자 즉 잘못 기입된 것은 삭제처리
DELETE FROM djy_blding_tsect WHERE useAprDay > '20240901';
 
OPTIMIZE TABLE djy_blding_tsect;
cs

 

 

 

728x90
블로그 이미지

Link2Me

,
728x90

건축인허가 층별 데이터를 DB에 업로드하는 방법을 PHP 코드로 구현해서 하려고 하니 엄두가 나지 않아서 MariaDB에서 제공하는 대용량 LOCAL FILE 업로드하는 방법으로 했다.

이 방법으로 하면 약 1500만개 데이터를 DB TABLE 에 데이터 저장하는데 15분 이내로 가능하다.

 

https://open.eais.go.kr/opnsvc/opnSvcInqireView.do# 에서 파일을 다운로드 한다.

매월 업데이트되는 파일을 받아서 업로드해야 하는데 중복체크 이런 걸 하려면 시간도 너무 오래걸리기 때문에 매월 자료 받으면 기존 데이터는 일괄 삭제하고 신규 데이터를 업로드하는 방식으로 하는게 낫다.

아쉽게도 파일의 인코딩모드가 euckr 로 되어 있기 때문에 파일을 나누고 EditPlus 같은 툴을 이용하여 UTF-8로 인코딩 모드를 변경한 후에 데이터 업로드를 해야 정상적으로 한글이 깨지지 않는다.

 

그리고 파일 구조 엑셀 파일을 다운로드하여 테이블 설계를 먼저 해야 한다.

테이블 설계시에는 칼럼의 개수와 순서가 반드시 일치하도록 해야 한다.

 

건축데이터 민간 개방시스템에서 제공하는 자료는 실시간 자료는 아니고 2개월 늦은 데이터라고 보면 된다.

실시간 데이터를 원하면 직접 세움터 사이트에서 조회를 해서 엑셀로 받아서 봐야 한다.

 

# 건축데이터 민간 개방시스템 대용량 파일 제공하는 게시판에서 파일을 받으면 utf-8 로 되어 있지 않다.
# 그냥 대용량 파일 업로드를 했더니 한글이 깨진다.
 
# 리눅스 파일 나누기
-n l/N 옵션: 파일 줄을 고려하여 N등분 한다.
-d 옵션: 000102 형태로 숫자로 접미사를 만든다.
--additional-suffix 옵션: 나눠진 파일명 뒤에 접미사를 추가로 붙인다.
split -n l/3 ---additional-suffix=.txt mart_kcy_03.txt kcypart_
 
# editplus 파일로 열어서 ANSI 를 UTF8 로 변경하여 저장한다.
 
mysql -uroot -p
SHOW VARIABLES LIKE 'character_set%';
 
use testdb;
 
DROP TABLE dgo_blding_floor;
CREATE TABLE dgo_blding_floor (
  pkfCode varchar(33NOT NULL COMMENT '관리_층별개요_PK',
  pkdCode varchar(33DEFAULT NULL COMMENT '관리_동별개요_PK',
  pkCode varchar(33NOT NULL COMMENT '관리_허가대장_PK',
  Address varchar(250DEFAULT NULL COMMENT '지번주소',
  bldNM varchar(100DEFAULT NULL COMMENT '건물명',
  sigungu varchar(5DEFAULT NULL COMMENT '시군구코드',
  bjdong varchar(5DEFAULT NULL COMMENT '법정동코드',
  daeji varchar(1DEFAULT NULL COMMENT '대지산구분code',
  bun varchar(4DEFAULT NULL COMMENT '번',
  ji varchar(4DEFAULT NULL COMMENT '지',
  spNM varchar(200DEFAULT NULL COMMENT '특수지명',
  block varchar(20DEFAULT NULL COMMENT '블록',
  Loot varchar(20DEFAULT NULL COMMENT '로트',
  stCode varchar(2DEFAULT NULL COMMENT '구조_코드',
  stCodeNM varchar(100DEFAULT NULL COMMENT '구조_코드명',
  mCode varchar(5DEFAULT NULL COMMENT '주용도코드',
  mCodeNM varchar(100DEFAULT NULL COMMENT '주용도코드명',
  fNO int(4NOT NULL DEFAULT 0 COMMENT '층번호',
  fArea double NOT NULL DEFAULT 0 COMMENT '층면적',
  fCode varchar(2DEFAULT NULL COMMENT '층구분코드',
  fCodeNM varchar(100DEFAULT NULL COMMENT '층구분코드명',
  archCode varchar(4DEFAULT NULL COMMENT '건축구분코드',
  archCodeNM varchar(100DEFAULT NULL COMMENT '건축구분코드명',
  regDate varchar(8DEFAULT NULL COMMENT '생성일자'
ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
ALTER TABLE dgo_blding_floor
  ADD UNIQUE KEY pkfCode (pkfCode) USING BTREE,
  ADD KEY pkCode (pkCode) USING BTREE;
 
COMMIT;
 
 
LOAD DATA LOCAL INFILE '/home/httpd/htdocs/sample/uploads/kcypart_00.txt' 
INTO TABLE dgo_blding_floor 
FIELDS TERMINATED BY '|' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
 
 
LOAD DATA LOCAL INFILE '/home/httpd/htdocs/sample/uploads/kcypart_01.txt' 
INTO TABLE dgo_blding_floor 
FIELDS TERMINATED BY '|' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
 
 
LOAD DATA LOCAL INFILE '/home/httpd/htdocs/sample/uploads/kcypart_02.txt' 
INTO TABLE dgo_blding_floor 
FIELDS TERMINATED BY '|' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
 
 
DELETE FROM dgo_blding_floor WHERE SUBSTRING_INDEX(Address, ' '1NOT IN ('서울특별시''경기도''인천광역시');
 

 

728x90
블로그 이미지

Link2Me

,