공간정보 분석용 API for Python


Intro

Compas에서는 공간 분석/연산을 위해 Geoband API를 제공합니다.

Compas에서 제공하는 Jupyter Notebook 환경에는 Geoband API(이하 API) 패키지가 설치되어 있으므로 별도로 설치할 필요는 없습니다.

이 문서는 Python Kernel 기준으로 작성되었습니다.


패키지 사용

API를 사용하기 위해 다음과 같이 import 합니다.

In [1]:
from geoband.API import *


공간연산한 결과 데이터를 표현하기위해 다음 패키지들도 import 합니다.

In [2]:
import folium
import json
import geopandas as gpd


Common Spec

Input parameter type

type name   Description
feature_name feture 명.
공간연산에 필요한 feature 목록을 compas에서 제공합니다.
feature_name에는 반드시 compas에서 제공된 목록에 있는 feature 명만 사용 가능합니다.
feature_list feture 이름 List.
공간연산시 여러 개의 feature가 필요한 경우 콤마(,)를 구분자로 해서 feature_list를 API에 제공해야 합니다.
cql Casandra Query Languate 참조
GeoJSON 위치정보를 갖는 점을 기반으로 체계적으로 지형을 표현하기 위해 설계된 개방형 공개 표준 형식. GeoJSON 참조
boolean True / False

공통 Input parameter

parameter name Optional
Description
saveFileName Y 결과 데이터를 저장할 파일명. 저장할 디렉토리를 지정 가능합니다. 생략시에는 파일을 저장하지 않습니다.

Return Data

type name 설명
GeoJSON 위치정보를 갖는 점을 기반으로 체계적으로 지형을 표현하기 위해 설계된 개방형 공개 표준 형식. GeoJSON 참조


Sample Featrues Data

Geoband 에서 제공하는 Feature 데이타 입니다. 공간분석시 사용가능합니다.
API 호출시 Feature Name을 사용하시기 바랍니다.

Type Title Feature Name SRS
Polygon 시도 geoband:tl_scco_ctprvn EPSG:4326
Polygon 시군구 geoband:tl_scco_sig EPSG:4326
Polygon geoband:tl_scco_li EPSG:4326
Polygon 읍면동 geoband:tl_scco_emd EPSG:4326
Point 녹시율(부산) geoband:gvi_busan EPSG:4326
Point 녹시율(대구) geoband:gvi_daegu EPSG:4326
Point 녹시율(광주) geoband:gvi_gwangju EPSG:4326
Point 녹시율(화성) geoband:gvi_hwaseong EPSG:4326
Point 녹시율(인천) geoband:gvi_incheon EPSG:4326
Point 녹시율(세종) geoband:gvi_sejong EPSG:4326
Point 녹시율(서울) geoband:gvi_seoul EPSG:4326
Point 녹시율(울산) geoband:gvi_ulsan EPSG:4326
Point 서울시 아파트 geoband:apartment EPSG:4326
Point 전국 은행 geoband:bank EPSG:4326
Point 전국 버거킹 geoband:bugerking EPSG:4326
Point 전국 던킨도너츠 geoband:dunkindonuts EPSG:4326
Point 전국 지진 geoband:earthquake EPSG:3857
Polygon 서울시 동 geoband:emd EPSG:3857
Point 전국 대기업 geoband:enterprise EPSG:3857
Point 전국 소방서 geoband:firestation EPSG:3857
Point 서울시 가스충전소 geoband:gasstation EPSG:3857
Point 전국 골프장 geoband:golf EPSG:3857
Point 서울시 병원 geoband:hospital EPSG:3857
Point 전국 KFC geoband:kfc EPSG:3857
Polygon 전국 읍면동 geoband:korea_emd EPSG:3857
Point 전국 학교 geoband:korea_school EPSG:3857
Polygon 전국 시군구 geoband:korea_sgg EPSG:3857
Line 서울시 샘플 라인 geoband:line EPSG:3857
Point 전국 롯데리아 geoband:lotteria EPSG:3857
Point 서울시 재래시장 geoband:market EPSG:3857
Point 전국 맥도널드 geoband:mcdonalds EPSG:3857
Point 전국 아웃브레이크 geoband:outbreak EPSG:3857
Line 서울시 OD 데이터 geoband:od_flow EPSG:3857
Polygon 서울시 오버레이1 geoband:overlay01 EPSG:3857
Polygon 서울시 오버레이2 geoband:overlay02 EPSG:3857
Point 서울시 주점 geoband:pubs EPSG:3857
Line 서울시 도로망 geoband:road EPSG:3857
Polygon 서울 구별 인구 변화 geoband:seoul_series EPSG:3857
Point 서울시 학교 geoband:school EPSG:3857
Polygon 서울시 구 geoband:sgg EPSG:3857
Polygon 서울시 경계 geoband:sid EPSG:3857
Point 전국 철도역 geoband:stations EPSG:3857
Point 서울시 마트 geoband:stores EPSG:3857
Point 서울시 극장 geoband:theaters EPSG:3857
Line 전국 지하철노선 geoband:subway EPSG:3857
Point 서울시 위험 화학물 취급업소 geoband:toxic_office EPSG:3857
Point 서울시 추적점 geoband:track_points EPSG:3857
Point 서울시 구청 geoband:wardoffice EPSG:3857


API

Vector Analysis

벡터 분석 및 처리와 관련된 프로세스 그룹입니다.

Aggregation

CircularBinning

포인트 피처, 범위, 반경을 이용하여 Circle 그리드를 생성 후 각 셀에 포인트의 수를 계산한 폴리곤 피처를 생성합니다.

Parameter
Name Type Required Description
features feature_name O Input point features to be aggregated.
weight string The numeric field or expression used to weight values.
Ex) [field] or [field] * 0.5 etc...

weight 식이 주어진 경우 weight의 값을 누적한다.
csr string 범위(extent) 지정에 사용할 좌표기준계
범위가 없는 경우 features 데이터의 Extent를 사용한다.
minX string 범위(extent) 지정에 사용할 최소 X 좌표
minY string 범위(extent) 지정에 사용할 최소 Y 좌표
maxX string 범위(extent) 지정에 사용할 최대 X 좌표
maxY string 범위(extent) 지정에 사용할 최대 Y 좌표
radius double O Radiuss of the grids.
radius는 0보다 커야 한다.
validGrid boolean Returns only valid grid. Default is True.
validGrid 파라미터의 기본값은 True이며, 포인트의 개수가 0 이상인 그리드만 반환한다.
saveFileName string 결과를 저장할 파일명
Return data
Type Description
GeoJSON Output features.
예제
In [3]:
json = CircularBinning(features="geoband:gvi_busan", weight="greenview",
                        csr="EPSG:4326", minX="128.7617", minY="34.9891", maxX="129.3056", maxY="35.389",
                        radius="0.05", validGrid="False", saveFileName="json/result_CircularBinning.json")
gdf = gpd.read_file('json/result_CircularBinning.json')
call api...
save done : json/result_CircularBinning.json
In [4]:
gdf = gdf.to_crs(epsg='4326')
converted_json = gdf.to_json()

m = folium.Map(
    location=[35.1598,129.0001],
    zoom_start=10
)

folium.GeoJson(
    converted_json,
).add_to(m)

m
Out[4]:
CollectEvents

포인트의 위치가 동일하거나 특정 반경 내의 포인트 피처를 하나의 피처로 생성합니다.

Parameter
Name Type Required Description
inputFeatures feature_name O The features representing event or incident data.
countField string The field to be calculated coincident points count. icount (Default).
countField 파라미터를 설정하지 않으면 icount 필드를 기본값으로 사용한다.
tolerance string The tolerance distance for considering two points equal. Format is double
tolerance값이 0이면 정확히 일치하는 포인트를, 0보다 크면 tolerance 거리 이내의 피처를 동일한 것으로 간주한다.
saveFileName string 결과를 저장할 파일명
Return data
Type Description
GeoJSON Output features.
예제
In [5]:
json = CollectEvents(inputFeatures="geoband:market", countField="mycnt", tolerance="5000", saveFileName="json/result_CollectEvents.json")
gdf = gpd.read_file('json/result_CollectEvents.json')
call api...
save done : json/result_CollectEvents.json
In [6]:
gdf = gdf.to_crs(epsg='4326')
converted_json = gdf.to_json()

m = folium.Map(
    location=[37.5338699,126.9999831],
    zoom_start=11
)

folium.GeoJson(
    converted_json,
).add_to(m)

m
Out[6]:
HexagonalBinning

포인트 피처, 범위, 반경을 이용하여 Hexagon 그리드를 생성 후 각 셀에 포인트의 수를 계산한 폴리곤 피처를 생성합니다.

Parameter
Name Type Required Description
features feature_name O Input point features to be aggregated.
weight string The numeric field or expression used to weight values. Ex) [field] or [field] * 0.5 etc...
weight 식이 주어진 경우 weight의 값을 누적한다.
csr string 범위(extent) 지정에 사용할 좌표기준계
범위가 없는 경우 features 데이터의 Extent를 사용한다.
minX string 범위(extent) 지정에 사용할 최소 X 좌표
minY string 범위(extent) 지정에 사용할 최소 Y 좌표
maxX string 범위(extent) 지정에 사용할 최대 X 좌표
maxY string 범위(extent) 지정에 사용할 최대 Y 좌표
size double O Size of the grids.
size는 0보다 커야 한다.
validGrid boolean Returns only valid grid. Default is True.
validGrid 파라미터의 기본값은 True이며, 포인트의 개수가 0 이상인 그리드만 반환한다.
saveFileName string 결과를 저장할 파일명
Return data
Type Description
GeoJSON Output features.
예제
In [7]:
json = HexagonalBinning(features="geoband:gvi_busan", weight="greenview",
                        csr="EPSG:4326", minX="128.7617", minY="34.9891", maxX="129.3056", maxY="35.389",
                        size="0.05", validGrid="False", saveFileName="json/result_HexagonalBinning.json")
gdf = gpd.read_file('json/result_HexagonalBinning.json')
call api...
save done : json/result_HexagonalBinning.json
In [8]:
gdf = gdf.to_crs(epsg='4326')
converted_json = gdf.to_json()

m = folium.Map(
    location=[35.1598,129.0001],
    zoom_start=10
)

folium.GeoJson(
    converted_json,
).add_to(m)

m
Out[8]:
PointStatistics

폴리곤 피처 레이어와 중첩하는 포인트 레이어의 개수 또는 기초 통계값을 계산합니다.

Parameter
Name Type Required Description
polygonFeatures feature_name O The polygon features to be calculated.
pointFeatures feature_name O The point features to be calculated.
countField string The count field. count is a default
statisticsFields string 아래 테이블 statisticsFields 참조
saveFileName string 결과를 저장할 파일명

statisticsFields
[함수명.필드명] 구조로 입력하며 사용가능한 함수는 다음과 같다. 예) Sum.pop, Mean.pop

입력값 반환필드명
First: String 필드, Dissolve 대상 Feature의 첫 번째 값 FST_필드명
Last: String 필드, Dissolve 대상 Feature의 마지막 값 LST_필드명
Sum: Numeric 필드, Dissolve 대상 Feature의 합 SUM_필드명
Mean: Numeric 필드, Dissolve 대상 Feature의 평균값 AVG_필드명
Min: Numeric 필드, Dissolve 대상 Feature의 최소값 MIN_필드명
Max: Numeric 필드, Dissolve 대상 Feature의 최대값 MAX_필드명
Std: Numeric 필드, Dissolve 대상 Feature의 표준편차 STD_필드명
Var: Numeric 필드, Dissolve 대상 Feature의 분산 VAR_필드명
Range: Numeric 필드, Dissolve 대상 Feature의 범위 RNG_필드명
Count: Dissolve 대상 Feature의 수 CNT_필드명
Return data
Type Description
GeoJSON Output features.
예제
In [9]:
json = PointStatistics(polygonFeatures="geoband:sgg", pointFeatures="geoband:stores", countField="cnt", 
                       statisticsFields="Count.sgg_cd", saveFileName="json/result_PointStatistics.json")
gdf = gpd.read_file('json/result_PointStatistics.json')
call api...
save done : json/result_PointStatistics.json
In [10]:
gdf = gdf.to_crs(epsg='4326')
converted_json = gdf.to_json()

m = folium.Map(
    location=[37.5638699,126.9999831],
    zoom_start=11
)

folium.GeoJson(
    converted_json,
).add_to(m)

m
Out[10]: