대한민국 최신 행정구역 Geometry OpenAPI

대한민국의 행정구역에 대한 Geometry를 얻을 수 있는 OpenAPI 서비스를 지오서비스에서 제공합니다. 이미 오래전부터 아래의 웹페이지를 통해 매년 최신 행정구역에 대한 SHP 파일을 제공해 드리고 있습니다.

대한민국 최신 행정구역(SHP) 다운로드

위 페이지에서 소개해 드리는 방식인 SHP 파일 형태가 아닌 REST OpenAPI 방식으로 행정구역도를 얻을 수 있는 서비스는 그 활용의 폭이 넓은데요. 특히 빅데이터의 처리 결과 등과 같은 통계 데이터에 대한 주제도 작성에 활용될 수 있습니다. 예를들어, 아래와 같은 Javascript 코드를 통해 원하는 행정구역의 지오메트리를 얻을 수 있습니다.

$.ajax({
    url: 'http://geoservice.co.kr:8080/Gp?command=ad2geom;tol=100',
    type: 'POST',
    crossDomain: true,
    data: '전주시 덕진구\n전주시 완산구',
    dataType: "text",
    success: function (response) {
        document.querySelector("#ta").textContent = response;
    },

    error: function (xhr, status) {
        alert("ERROR");
    }
});

위의 코드는 전주시 덕진구와 전주시 완산구에 대한 행정구역을 WKT 포맷으로, 100m 거리값 만큼 토폴로지를 유지한 형태로 단순화(Simplify)된 지오메트리로 그 결과를 아래처럼 JSON으로 받습니다. 실제 내용은 아래보다 훨씬 길어서 축약해 표시 했습니다.

{
    "_EPSG":5179,
    "전주시 덕진구":"POLYGON((957449 1766921, 958719 1763384, ...  , 957449 1766921))",
    "전주시 완산구":"POLYGON((957449 1766921, 958719 1766944, ... , 957449 1766921))"
}

서비스되는 행정구역의 명칭은 시도, 시군구, 읍면동, 리 전체입니다. 행정구역의 명칭은 요약이나 별칭도 가능합니다. 즉, 서울특별시 뿐만 아니라 서울, 서울시가 가능하고, 전라북도 뿐만 아니라 전북도 가능합니다. 이 서비스는 별도의 공지가 없는 한 자유롭게 사용하실 수 있습니다.

지오서비스는 위치기반 서비스와 관련된 또 다른 유용한 서비스로써 편리하게 사용할 수 있는 주소/좌표간의 변환툴(Geocoding Tool)을 무료로 제공하고 있는데요. 아래의 URL을 통해 자세한 내용을 살펴보실 수 있습니다.

주소 좌표 변환 툴, Geocoder-Xr

수치미분(접선)의 결과를 그래프로 표현하기

다음과 같은 함수가 있을 때.. 이 함수를 미분한 결과는 이 함수의 그래프에 대한 접선의 방정식이 됩니다.

위 함수에 대한 코드 정의는 다음과 같습니다.

def fx(x):
    return x**3 + x

미분은, 중앙차분 방식으로 정의하면 다음과 같구요.

def numerical_diff(f, x):
    h = 1e-4
    return (f(x+h) - f(x-h)) / (2*h)

미분 결과는 접선인데, 이 접선을 표현하는 함수를 반환하는 함수는 다음과 같습니다.

def tangent_line(f, x):
    d = numerical_diff(f, x)
    y = f(x) - d*x
    return lambda t: d*t + y

이제 x 절편의 범위를 0~20까지 잡고 함수의 그래프와 이 함수의 x = 11에서의 접선을 그리는 코드는 다음과 같습니다.

import numpy as np
import matplotlib.pylab as plt

# def numerical_diff(f, x):
# def tangent_line(f, x):
# def fx(x):

x = np.arange(0.0, 20.0, 0.1)
y = fx(x)
plt.plot(x,y)

tf = tangent_line(fx, 11)
y2 = tf(x)
plt.plot(x, y2)

plt.show()

결과 그래프는 다음과 같습니다.

이와 같은 미분에 대한 파이선 코드는 기계 학습이나 신경망 학습에서 가중치와 편향에 대한 최적의 값을 얻기 위해 활용되는 경사하강법(Gradient Descent Method)에서 사용됩니다.