국토 가치를 더하다 행복한 변화로 가득한 세상 공간정보로 펼쳐질 대한민국의 미래입니다

활용공간

사용가이드

home > 활용공간 > 국가공간정보포털API > 사용가이드
프린트

국가공간정보포털 Open API 서비스

국가공간정보포털 Open API 란?
  • Open API 는 속성정보와 공간정보를 담은 데이터를 외부에서 활용 할 수 있도록 KML 또는 GEOJSON 형태로 데이터를 제공하고 시각화 도구 SDK를 활용하여 지도를 표출 할 수 있도록 제공하는 API 서비스 입니다.
  • “플랫폼으로서의 웹” 이라는 특징을 기술적으로 구현한 대표적인 Web 2.0의 기술이며, 하나의 웹 사이트에서 자신이 가진 기능을 이용할 수 있도록 공개한 프로그래밍 인터페이스입니다.

* 국가공간정보포털에서는 통합검색 서비스에서 제공하고 있는 공간 정보 및 속성정보에 대한 OpenAPI를 누구든 이용할 수 있도록 제공합니다
API KEY 발급 방법

Open API 서비스를 이용하기 위해서는 신규 인증키 신청(활용공간 > 국가공간정보포털API > 신규 인증키 신청) 페이지에서 API KEY 신청을 한 후, API KEY를 발급 받아야 합니다.
신청 완료 시 나의 인증키 조회(활용공간 > 국가공간정보포털API > 나의 인증키 조회) 페이지에서 발급 완료 된 API KEY와 함께 요청 URL을 서버로 전송하면 Open API 서비스를 이용하실 수 있습니다.

요청 변수

유효한 요청 URL의 구성을 위해 아래의 서비스별 요청변수 정보를 참고하여 요청 매개변수를 "요청변수=값 &요청변수=값 &..."의 형태로 추가하여야 합니다.

공간 정보 테이블 목록 요청 변수

공간 정보 데이터를 활용 하기 위해서 먼저 API 가 제공하는 데이터 테이블의 목록을 확인해야 합니다.
  *요청 URL : http://www.nsdi.go.kr/lxportal/zcms/nsdi/platform/openapi.html

공간 정보 테이블 목록 요청 변수
변수명 고정여부 샘플 데이터 설명
apitype 고정 dataList apitype이 dataList인 경우 Open API에서 제공하는 데이터 테이블의 ID 목록을 제공합니다. 검색 된 ID를 사용하여 다른 API의 검색 테이블을 설정 할 수 있습니다.
authkey 임의 ( 발급된 API KEY ) 발급 완료된 API KEY를 입력합니다.

공간 정보 테이블 컬럼 목록 요청 변수

공간정보 테이블의 컬럼 정보 목록을 제공 합니다.
  *요청 URL : http://www.nsdi.go.kr/lxportal/zcms/nsdi/platform/openapi.html

공간 정보 테이블 컬럼 목록 요청 변수
변수명 고정여부 샘플 데이터 설명
apitype 고정 columnList apitype이 columnList인 경우 Open API에서 제공하는 데이터 테이블의 컬럼 정보를 제공합니다.
datasets 고정 12642 공간정보 데이터 테이블 검색 API의 결과에서 검색 할 데이터 테이블을 정한 후 OBJ_SEQ값을 이곳에 입력합니다.
authkey 임의 ( 발급된 API KEY ) 발급 완료된 API KEY를 입력합니다.

공간 정보 테이블 데이터 요청 변수

공간정보 테이블의 데이터를 GeoJson, KML 형태로 제공 하며 데이터를 활용 하기 위해서 먼저 API 가 제공하는 데이터 테이블의 목록을 확인해야 합니다.
  *요청 URL : http://www.nsdi.go.kr/lxportal/zcms/nsdi/platform/openapi.html

공간 정보 테이블 데이터 요청 변수
변수명 고정여부 샘플 데이터 설명
data 고정 data apitype이 data인 경우 Open API에서 제공하는 데이터 테이블의 공간정보를 제공합니다.
resulttype 고정 geojson 결과가 표시될 포맷을 선택합니다.(geojson, kml 중 택 1)
datasets 고정 12642 공간정보 데이터 테이블 검색 API의 결과에서 검색 할 데이터 테이블을 정한 후 OBJ_SEQ값을 이곳에 입력합니다.
bbox 임의 933650.614474257,1943286.5512082838, 970380.2826180774,1961733.2057452637 검색 영역 사각형(x1y1, x2y1, x1y2, x2y2)의 x1y1과 x2y2를 입력합니다. 허용 좌표계는 EPSG:5179만 제공합니다.
authkey 임의 ( 발급된 API KEY ) 발급 완료된 API KEY를 입력합니다.

지도 시각화 SDK 요청 변수

공간정보를 지도 위에 시각화 하여 표출 할 수 있는 SDK를 제공 합니다.
  *요청 URL : http://www.nsdi.go.kr/lxportal/zcms/nsdi/platform/sdkGeoView.js.htm

지도 시각화 SDK 요청 변수
변수명 고정여부 샘플 데이터 설명
authkey 임의 ( 발급된 API KEY ) 발급 완료된 API KEY를 입력합니다.

데이터 API 예제

공간 정보 테이블 목록

  • 요청 예시
  • 요청 결과 예시
  • 요청 변수 입력
  • 요청 변수 입력
    항목명 입력값
    apitype dataList



  • 요청 결과

공간 정보 테이블 컬럼 정보

  • 요청 예시
  • 요청 결과 예시
  • 요청 변수 입력
  • 요청 변수 입력
    항목명 입력값
    apitype columnList
    datasets

    검색

  • 요청 결과

공간 정보 데이터

  • 요청 예시
  • 요청 결과 예시
  • 요청 변수 입력
  • 요청 변수 입력
    항목명 입력값
    apitype dataList
    resulttype
    datasets
    bbox

    검색

  • 요청 결과

통합 활용예제

샘플 데이터
  • 샘플데이터는 국가공간정보포털 API로 제공하는 데이터의 일부이며, API 이용시 보다 많은 데이터를 이용하실 수 있습니다.

현재 지도 레벨 :
통합 활용예제 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
<!DOCTYPE html>
<html>
<head>
  <title>국가공간정보포털 OpenAPI</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
  <!-- 오픈API -->
  <script type="text/javaScript" src="http://www.nsdi.go.kr/lxportal/zcms/nsdi/platform/sdkGeoView.js.html?authkey=인증키"></script>
 
  <style>
    .row.content {height: 100%}
   
    .sidenav {
      padding-top: 20px;
      background-color: #f1f1f1;
      height: 100%;
    }
    
    @media screen and (max-width: 767px) {
      .sidenav {
        height: auto;
        padding: 15px;
      }
      .row.content {height:auto;} 
    }
    
    #btnAddToMap{
         margin-right: 25px;
    padding-right: 10px;
    padding-left: 10px;
    }
    #clearMap{
     margin-right: 25px;
    padding-right: 25px;
    padding-left: 25px;
    }
  </style>
</head>
<body>
 
<div class="container-fluid text-center">        
  <div class="row content">
   <div class="col-sm-3 sidenav">
      <div class="well">
        <p>데이터 목록</a></p>
        <select id="dataList" size="7" style="border: solid 1px;width: 100%;height: 355px;"></select>
        
        <h4>Column(차트 Y축)</h4>
        <select id="dataColumn" size="7" style="border: solid 1px;  width: 100%; height: 125px;"></select>
        
        <h4>Column(차트 X축)</h4>
        <select id="dataColumn2" size="7" style="border: solid 1px;  width: 100%; height: 125px;"></select>
                    
      </div>
      <div class="container" style="width: auto;">
        <input class="btn btn-primary" type="button" id="btnAddToMap" value='확인'/>
        <input class="btn btn-danger" type="button" id="clearMap" value='초기화'/>
      </div>    
    </div>
     <div class="col-sm-5 text-left">
      <div class="row">
        <div class="col-sm-12">
          <div class="panel panel-default text-left">
            <div class="panel-body">
               <div id="sampleMap" style="height: 800px; width:100%;border: solid 1px;"></div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="col-sm-4 sidenav">
      <div class="well">
        <p>차트</p>
        <div id="sampleChart" style="height: 250px;"></div>
      </div>
      <div class="well">
        <p>컬럼테이블</p>
        <table id="sampleGrid" style="height : 380px; width: 100%;"></table>
      </div>
    </div>
  </div>
</div>
 
<script>
var map;
var apiUrl = "http://www.nsdi.go.kr/lxportal/zcms/nsdi/platform/openapi.html";
var authkey = '인증키';
var bboxResult;
var userCenter;
$(document).ready(function(){
    
    // 지도생성
    map = new pf.GeoView("sampleMap","vworld",true,true);
    
    map.baseMap.getView().setCenter(ol.proj.transform([948988.4139031649,1947273.5479532676], 'EPSG:3857''EPSG:3857'));//여의도
    map.baseMap.getView().setZoom(13);//지도 표출 레벨 설정
    map.baseMap.getView().setMinZoom(13)//지도 최소레벨 설정
    map.baseMap.getView().setMaxZoom(16)//지도 최대레벨 설정
    map.baseMap.updateSize();
    
    map.baseMap.on('moveend'function(){
        bboxResult = map.baseMap.getView().calculateExtent().toString();
        userCenter = map.baseMap.getView().getCenter();
    })
    //데이터 목록요청
    getDataList();
    
    $("#clearMap").on('click',function(){
        $("#sampleChart").empty();
        $("#sampleGrid").empty();
        $(".tbl_box").remove();
        newJquery(".lyhidden").click();
        //map.baseMap.removeLayer(map.baseMap.getLayers().getArray()[5])
    })
    // 데이터목록 선택시
    $("#dataList").on("click",function(){
        var obj_seq = $(this).val();
        // 데이터 컬럼 생성
        getDataColumn(obj_seq);
    });
    
    $("#btnAddToMap").on("click",function(){
        $("#sampleChart").empty();
        $("#sampleGrid").empty();
        $(".tbl_box").remove();
        newJquery(".lyhidden").click();
        var obj_seq = $("#dataList").val();
        var obj_kname = $("#dataList option:selected").attr("label");
        var obj_val = $("#dataList option:selected").val();
        var column_name = $("#dataColumn").val();
        var column_name2 = $("#dataColumn2").val();
        
        $.ajax({
            type: "POST",
            data:{
                 'apitype''data',
                 'resulttype':'geojson',
                 'datasets': obj_seq,
                 'bbox': bboxResult,        // 현재맵의 bbox
                 'authkey':authkey
            },
            dataType: "json",
            async: false,
            url: apiUrl,
            success: function(response){
                data = response;
                
                //시각화설정                
                map.addMapViLayer(data,    // 표출 할 공간정보 데이터를 변수에 넣은 후 변수를 입력합니다.
                    "geojson"        // 파라미터 번호 1번에 넣을 데이터가 geojson 형식인지 kml 형식인지 구분합니다.
                    ,obj_val        // 레이어 고유의 이름을 설정합니다.
                    ,"legend"        // 지도위에 공간정보를 시각화 할 옵션을 선택합니다. legend, bubble, heat 중 선택합니다.
                    ,column_name        // 시각화 할 속성(숫자)의 이름을 넣습니다.
                    ,null            // 공간 객체에 표시 하고 싶은 속성이 있다면 속성의 이름을 넣습니다.(문자열만 가능하며 null 입력 시 미표시)
                    ,obj_kname        // 지도 좌측 상단의 레이어에 표시 하고자 하는 이름을 넣습니다
                    ,'EPSG:5179'    // 좌표계
                );
                
                map.baseMap.getView().setCenter(ol.proj.transform(userCenter, 'EPSG:3857''EPSG:3857'));
                map.baseMap.getView().setZoom(13);
                
                
                //차트설정
                map.setChart("sampleChart"    // 차트가 표시 될 DIV 태그의 아이디를 넣습니다.
                    ,"line"                // 표출 할 차트의 종류를 선택합니다.
                    ,obj_val            // 지도의 여러 레이어 중 차트에 표시 할 레이어의 이름을 입력 합니다.
                    ,column_name2            // 지도에 표출 한 공간정보에서 차트에 표출할 속성(숫자)의 이름을 넣습니다.(가로축)
                    ,obj_kname                // 차트 상단에 표시 할 제목을 적습니다.(null 입력시 미표시)
                    ,column_name            // Y축에 표시 할 제목을 적습니다.(null 입력시 미표시)
                    ,column_name            // 세로축
                );
                
                var column_names = $("#dataColumn").find("option").map(function() {
                    return $(this).val();
                });
                
                //그리드설정
                map.setGrid("sampleGrid"    // 데이터 테이블이 표시 될 TABLE 태그의 아이디를 넣습니다.
                    ,obj_val                // 지도의 여러 레이어 중 데이터 테이블에 표시 할 레이어의 이름을 입력 합니다.
                    ,null                    // 데이터 테이블에 표시 할 속성들의 한글명을 배열 형태로 입력합니다.(null 입력시 4번 파라미터의 속성이름 표시)
                    ,column_names        // 속성이름
                    ,obj_kname            // 데이터 테이블에 표시 할 제목을 입력합니다.(null 입력 시 미표시)
                );
            }
        });  
    });
    
});
//공간 정보 테이블 목록 요청
function getDataList() {
    // 데이터목록 생성
    $.ajax({
        type: "POST",
        data:{
             'apitype''dataList',
             'authkey':authkey
        },
        dataType: "json",
        async: false,
        url: apiUrl,
        success: function(response){
            var dataList = $("#dataList"); 
            for(key in response) {
                var obj_seq = response[key].OBJ_SEQ;
                var obj_kname = response[key].OBJ_KNAME;
                $("<option value='"+ obj_seq +"' label='"+ obj_kname +"'>"+obj_kname+"</option>")
                .appendTo(dataList);
            }
        }
    });  
}
 
//공간 정보 테이블 컬럼 정보 요청
function getDataColumn(obj_seq) {
    $.ajax({
        type: "POST",
        data:{
             'apitype''columnList',
             'datasets': obj_seq,
             'authkey':authkey
        },
        dataType: "json",
        async: false,
        url: apiUrl,
        success: function(response){
             var dataColumn = $("#dataColumn");
             dataColumn.empty();
             var dataColumn2 = $("#dataColumn2");
             dataColumn2.empty();
             for(key in response) {
                var column_id = response[key].COLUMN_ID;
                var comments = response[key].COMMENTS;
                var column_name = response[key].COLUMN_NAME;
                comments = !comments?column_name:comments;
                $("<option value='"+column_name+"' label='"+comments+"'>"+comments+"</option>").appendTo(dataColumn);
                $("<option value='"+column_name+"' label='"+comments+"'>"+comments+"</option>").appendTo(dataColumn2);
            }
        }
    });  
}
</script>
</body>
</html>