후속 처리를 위한 도형 준비
| 항목 | 값 |
|---|---|
| 화면 이름 | Prepare geometry |
| 식별자 | normalizeGeometryV4 |
| 지원 실행 방식 | Batch, Streaming |
| 범주 | 지리공간 (Geospatial) |
| 반환 자료형 | Geometry | Struct<ok:Geometry, error:String> |
도형 문자열을 유효한 GeoJSON으로 변환하여 온톨로지 인덱싱 같은 후속 처리에 준비합니다. 다각형을 닫고 중복을 제거합니다. 너비가 180도를 넘어 날짜 변경선을 가로지르는 것으로 판단한 도형은 양쪽의 여러 feature로 나눕니다. 기본 모드는 변환 결과 또는 변환 실패 시 null을 반환하며, show errors 모드는 해석한 결과나 설명형 오류 메시지를 담은 구조체를 반환합니다.
입력 인자
| 이름 | 지정 여부 | 자료형 | 의미와 조건 |
|---|---|---|---|
Geometry string | 필수 | Expression<String> | 해석하여 GeoJSON으로 변환할 도형 문자열입니다. |
Output mode | 선택 | Enum<Simple, With errors> | 변환한 도형 또는 오류 시 null을 반환하는 simple 모드와 결과 구조체 중 선택합니다. 구조체는 성공한 도형을 ok, 변환할 수 없는 경우의 설명형 오류를 error 필드에 담습니다. |
입출력 예시
예시 1: 기본 동작
인자 값:
Geometry string:geometryOutput mode: null
| geometry | 출력 |
|---|---|
| {"type":"Polygon","coordinates":[[[0.0,0.0],[10.0,0.0],[10.0,10.0],[0.0,10.0],[0.0,0.0]]]} | {"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} |
| {"type":"Polygon","coordinates":[[[0.0,0.0,1.0],[1.0,0.0,1.0],[0.0,1.0,1.0],[0.0,0.0,1.0]]]} | {"type":"Polygon","coordinates":[[[0.0,0.0,1.0],[0.0,1.0,1.0],[1.0,0.0,1.0],[0.0,0.0,1.0]]]} |
| {"type":"Polygon","coordinates":[[[0.0,0.0],[1.0,0.0], [0.0,1.0]]]} | {"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,1.0],[1.0,0.0],[0.0,0.0]]]} |
| {"type":"Polygon","coordinates":[[[0.0,0.0],[1.0,0.0], [1.0,0.0], [0.0,1.0], [0.0,0.0]]]} | {"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,1.0],[1.0,0.0],[0.0,0.0]]]} |
| {"type":"Polygon","coordinates":[[[179.0,-30.0],[-179.0,-30.0],[-179.0,30.0],[179.0,30.0],[179.0,-30]]]} | {"type":"MultiPolygon","coordinates":[[[[-180.0,-30.0],[-180.0,30.0],[-179.0,30.0],[-179.0,-30.0],[-180.0,-30.0]]],[[[180.0,30.0],[180.0,-30.0],[179.0,-30.0],[179.0,30.0],[180.0,30.0]]]]} |
| {"type":"LineString","coordinates":[[179.0,30.0],[-179.0,30.0]]} | {"type":"MultiLineString","coordinates":[[[179.0,30.0],[180.0,30.0]],[[-180.0,30.0],[-179.0,30.0]]]} |
| {"type":"GeometryCollection","geometries":[{"type":"LineString","coordinates":[[40.0,10.0],[0.0,1.0]... | {"type":"GeometryCollection","geometries":[{"type":"LineString","coordinates":[[40.0,10.0],[0.0,1.0]... |
| {"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[1.0,0.0]},{"type":"LineString","coordinates":[[179.0,30.0],[-179.0,30.0]]}]} | {"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[1.0,0.0]},{"type":"MultiLineString","coordinates":[[[179.0,30.0],[180.0,30.0]],[[-180.0,30.0],[-179.0,30.0]]]}]} |
| {"type":"GeometryCollection","geometries":[{"type":"LineString","coordinates":[[0.0,0.0],[1.0,0.0]]}... | {"type":"MultiLineString","coordinates":[[[0.0,0.0],[1.0,0.0]],[[1.0,1.0],[2.0,1.0]]]} |
| {"type":"GeometryCollection","geometries":[{"type":"MultiLineString","coordinates":[[[0.0,0.0],[1.0,0.0]],[],[[1.0,1.0],[2.0,1.0]]]},{"type":"MultiPoint","coordinates":[[0.0,0.0],[1.0,1.0]]}]} | {"geometries":[{"coordinates":[[[0.0,0.0],[1.0,0.0]],[[1.0,1.0],[2.0,1.0]]],"type":"MultiLineString"},{"coordinates":[[0.0,0.0],[1.0,1.0]],"type":"MultiPoint"}],"type":"GeometryCollection"} |
| {"type":"MultiPolygon","coordinates":[[[[1.0,1.0],[2.0,1.0],[2.0,2.0],[1.0,2.0],[1.0,1.0]]],[[]],[[[10.0,10.0],[20.0,10.0],[20.0,20.0],[10.0,20.0],[10.0,10.0]]]]} | {"type":"MultiPolygon","coordinates":[[[[1.0,2.0],[2.0,2.0],[2.0,1.0],[1.0,1.0],[1.0,2.0]]],[[[10.0,20.0],[20.0,20.0],[20.0,10.0],[10.0,10.0],[10.0,20.0]]]]} |
예시 2: 기본 동작
인자 값:
Geometry string:geometryOutput mode: null
| geometry | 출력 |
|---|---|
| {"type":"MultiPolygon","coordinates":[[[[102.0,2.0],[102.0,3.0],[103.0,3.0],[103.0,2.0],[102.0,2.0]]]]} | {"type":"Polygon","coordinates":[[[102.0,2.0],[102.0,3.0],[103.0,3.0],[103.0,2.0],[102.0,2.0]]]} |
| {"type":"MultiPolygon","coordinates":[[[]],[[[102.0,2.0],[103.0,2.0],[103.0,3.0],[102.0,3.0],[102.0,2.0]]]]} | {"type":"Polygon","coordinates":[[[102.0,2.0],[102.0,3.0],[103.0,3.0],[103.0,2.0],[102.0,2.0]]]} |
| {"type":"FeatureCollection","features":[{"geometry":{"type":"MultiPolygon","coordinates":[[[[0.0,0.0],[0.0,1.0],[1.0,0.0],[0.0,0.0]]]]},"properties":{"gaccname":"namehere"},"type":"Feature"}]} | {"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,1.0],[1.0,0.0],[0.0,0.0]]]} |
| {"type":"GeometryCollection","geometries":[{"type":"LineString","coordinates":[[40.0,11.0],[0.0,1.0]]},{"type":"LineString","coordinates":[[10.0,10.0],[20.0,20.0],[10.0,40.0]]}]} | {"type":"MultiLineString","coordinates":[[[40.0,11.0],[0.0,1.0]],[[10.0,10.0],[20.0,20.0],[10.0,40.0]]]} |
예시 3: 기본 동작
인자 값:
Geometry string:geometryOutput mode: null
| geometry | 출력 |
|---|---|
| {"type":"Polygon","coordinates":[[[0.0,0.0],[1.0,1.0],[0.0,1.0], [1.0,0.0], [0.0,0.0]]]} | {"type":"MultiPolygon","coordinates":[[[[0.0,0.0],[0.5,0.5],[1.0,0.0],[0.0,0.0]]],[[[0.5,0.5],[0.0,1.0],[1.0,1.0],[0.5,0.5]]]]} |
| {"type":"Polygon","coordinates":[[[0.0,0.0],[2.0,0.0],[1.0,1.0],[2.0,2.0],[0.0,2.0],[1.0,1.0],[0.0,0.0]]]} | {"type":"MultiPolygon","coordinates":[[[[0.0,0.0],[1.0,1.0],[2.0,0.0],[0.0,0.0]]],[[[1.0,1.0],[0.0,2.0],[2.0,2.0],[1.0,1.0]]]]} |
| {"type":"Polygon","coordinates":[[[0.0,0.0],[2.0,0.0],[2.0,2.0],[0.0,2.0],[0.0,0.0]],[[0.0,0.0],[2.0,0.0],[1.0,1.0],[0.0,0.0]]]} | {"type":"Polygon","coordinates":[[[0.0,2.0],[2.0,2.0],[2.0,0.0],[1.0,1.0],[0.0,0.0],[0.0,2.0]]]} |
| {"type":"Polygon","coordinates":[[[0.0,0.0],[1.0,0.0],[1.0,1.0],[0.0,1.0],[0.0,0.0]],[[3.0,3.0],[4.0,3.0],[4.0,4.0],[3.0,4.0],[3.0,3.0]]]} | {"type":"MultiPolygon","coordinates":[[[[0.0,1.0],[1.0,1.0],[1.0,0.0],[0.0,0.0],[0.0,1.0]]],[[[3.0,4.0],[4.0,4.0],[4.0,3.0],[3.0,3.0],[3.0,4.0]]]]} |
예시 4: null 처리
인자 값:
Geometry string:geometryOutput mode:with_errors
| geometry | 출력 |
|---|---|
| null | { error: Input is null, ok: null, } |
| Not geojson | { error: Input string could not be parsed as GeoJSON, ok: null, } |
| {"type":"Polygon","coordinates":[[[0.0,0.0],[1.0,0.0,1.0],[0.0,1.0],[0.0,0.0]]]} | { error: Coordinate dimension is mixed, ok: null, } |
| {"type":"LineString","coordinates":[[0.0,0.0]]} | { error: Invalid number of points in LineString (found 1 - must be 0 or >= 2), ok: null, } |
| {"type":"Polygon","coordinates":[[[0.0,0.0],[1.0,91.0],[0.0,1.0],[0.0,0.0]]]} | { error: Coordinates out-of-bounds. Latitudes must fall in [-90, 90] and longitudes in [-180, 180], ok: null, } |
| {"type":"Polygon","coordinates":[[[0.0,-90.1],[1.0,0.0],[0.0,1.0],[0.0,0.0]]]} | { error: Coordinates out-of-bounds. Latitudes must fall in [-90, 90] and longitudes in [-180, 180], ok: null, } |
| {"type":"Polygon","coordinates":[[[0.0,0.0],[181.0,89.0],[0.0,1.0],[0.0,0.0]]]} | { error: Coordinates out-of-bounds. Latitudes must fall in [-90, 90] and longitudes in [-180, 180], ok: null, } |
| {"type":"Polygon","coordinates":[[[0.0,0.0],[-182.0,89.0],[0.0,1.0],[0.0,0.0]]]} | { error: Coordinates out-of-bounds. Latitudes must fall in [-90, 90] and longitudes in [-180, 180], ok: null, } |
| {"type":"Polygon","coordinates":[]} | { error: Expected polygon to contain at least one ring, ok: null, } |
예시 5: null 처리
인자 값:
Geometry string:geometryOutput mode: null
| geometry | 출력 |
|---|---|
| {"type":"Polygon","coordinates":[[]]} | null |
예시 6: 경계 조건
인자 값:
Geometry string:geometryOutput mode: null
| geometry | 출력 |
|---|---|
| {"coordinates": [[[-191.9065788394177,5.453742403668187],[-191.9065788394177,-11.163604962907428],[-... | {"type":"MultiPolygon","coordinates":[[[[-180.0,-11.163604962907428],[-180.0,5.453742403668187],[-15... |
예시 7: 경계 조건
인자 값:
Geometry string:geometryOutput mode: null
| geometry | 출력 |
|---|---|
| {"type":"LineString","coordinates":[[1.0, 1.0], [1.0, 1.0], [1.0, 1.0]]} | {"type":"Point","coordinates":[1.0,1.0]} |
예시 8: 경계 조건
인자 값:
Geometry string:geometryOutput mode: null
| geometry | 출력 |
|---|---|
| {"type":"MultiPolygon","coordinates":[[[[0.0,0.0],[1.0,0.0],[0.0,0.0]]],[[[102.0,2.0],[103.0,2.0],[103.0,3.0],[102.0,3.0],[102.0,2.0]]]]} | {"type":"GeometryCollection","geometries":[{"type":"LineString","coordinates":[[0.0,0.0],[1.0,0.0]]},{"type":"Polygon","coordinates":[[[102.0,2.0],[102.0,3.0],[103.0,3.0],[103.0,2.0],[102.0,2.0]]]}]} |
예시 9: 경계 조건
인자 값:
Geometry string:geometryOutput mode: null
| geometry | 출력 |
|---|---|
| {"type":"GeometryCollection","geometries":[{"type":"GeometryCollection","geometries":[{"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[-122.4000,37.8000]}]}]}]} | {"coordinates":[-122.4, 37.8], "type":"Point"} |
| {"type":"GeometryCollection","geometries":[{"type":"GeometryCollection","geometries":[{"type":"Geome... | {"coordinates":[-122.4, 37.8], "type":"Point"} |
예시 10: 경계 조건
인자 값:
Geometry string:geometryOutput mode:with_errors
| geometry | 출력 |
|---|---|
| {"type":"GeometryCollection","geometries":[{"type":"GeometryCollection","geometries":[{"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[-122.4000,37.8000]}]}]}]} | { error: null, ok: {"type":"Point","coordinates":[-122.4,37.8]}, } |
| {"type":"GeometryCollection","geometries":[{"type":"GeometryCollection","geometries":[{"type":"Geome... | { error: null, ok: {"type":"Point","coordinates":[-122.4,37.8]}, } |
| {"type":"GeometryCollection","geometries":[{"type":"GeometryCollection","geometries":[{"type":"Multi... | { error: null, ok: {"type":"MultiLineString","coordinates":[[[-122.36,37... |
| {"type":"GeometryCollection","geometries":[{"type":"GeometryCollection","geometries":[{"type":"MultiPoint","coordinates":[[-122.4100,37.8100],[-122.4200,37.8200],[-122.4300,37.8300]]}]}]} | { error: null, ok: {"type":"MultiPoint","coordinates":[[-122.41,37.81],[-122.42,37.82],[-122.43,37.83]]}, } |
긴 구조값 안의 줄임표는 생략한 내용을 나타냅니다.