Loading...
MySQL 9.5 Reference Manual 9.5의 14.16.13 Spatial Convenience Functions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이 절의 함수들은 geometry 값에 대한 편의 연산을 제공합니다.
특별히 명시되지 않는 한, 이 절의 함수들은 geometry 인자를 다음과 같이 처리합니다:
어떤 인자라도 NULL이면 반환 값은 NULL입니다.
어떤 geometry 인자라도 구문적으로 잘 형식화된 geometry가 아니면
ER_GIS_INVALID_DATA 오류가 발생합니다.
어떤 geometry 인자라도 정의되지 않은 공간 참조 시스템(spatial reference system, SRS)의 구문적으로 잘 형식화된
geometry이면
ER_SRS_NOT_FOUND 오류가 발생합니다.
여러 개의 geometry 인자를 취하는 함수의 경우, 그 인자들이 같은 SRS에 있지 않으면
ER_GIS_DIFFERENT_SRIDS 오류가 발생합니다.
그 밖의 경우, 반환 값은 NULL이 아닙니다.
다음과 같은 편의 함수들이 제공됩니다:
구형(球形) 상의 Point 또는 MultiPoint
인자들 사이의 최소 구면 거리를 미터 단위로 반환합니다. (일반적인 목적의
거리 계산을 위해서는
ST_Distance() 함수를 참조하십시오.) 선택적인 radius 인자는
미터 단위로 지정해야 합니다.
두 geometry 파라미터가 SRID 0의 유효한 데카르트(Cartesian)
Point 또는 MultiPoint
값이면, 반환 값은 제공된 반지름을 갖는 구형에서 두 geometry 사이의 최단 거리입니다.
radius를 생략하면 기본 반지름은 6,370,986미터이며,
Point의 X와 Y 좌표는 각각 경도와 위도(도 단위)로 해석됩니다.
두 geometry 파라미터가 지리 공간 참조 시스템(geographic spatial reference system, SRS)에서의 유효한
Point 또는 MultiPoint 값이면,
반환 값은 제공된 반지름을 갖는 구형에서 두 geometry 사이의
최단 거리입니다. radius를 생략하면, 기본 반지름은 평균 반지름과 같으며,
이는 a를 장반경(semi-major axis), b를 단반경(semi-minor axis)으로 하는
(2a+b)/3으로 정의됩니다.
ST_Distance_Sphere()는
서론에서 설명한 대로 인자를 처리하되, 다음과 같은 예외가 있습니다:
지원되는 geometry 인자 조합은
Point와 Point, 또는
Point와 MultiPoint
(인자 순서는 무관)입니다. geometry 중 하나 이상이
Point도 MultiPoint도 아니고
SRID가 0인 경우
ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS
오류가 발생합니다. geometry 중 하나 이상이
Point도 MultiPoint도 아니고
SRID가 지리 SRS를 참조하는 경우
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
오류가 발생합니다. geometry 중 어떤 것이든 투영 SRS를 참조하는 경우
ER_NOT_IMPLEMENTED_FOR_PROJECTED_SRS
오류가 발생합니다.
어떤 인자라도 범위를 벗어난 경도 또는 위도를 가지면 오류가 발생합니다:
경도 값이 범위 (−180, 180] 내에 있지 않으면
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
오류가 발생합니다.
위도 값이 범위 [−90, 90] 내에 있지 않으면
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
오류가 발생합니다.
표시된 범위는 도 단위입니다. 어떤 SRS가 다른 단위를 사용하면, 해당 범위는 그 단위의 값으로 표현됩니다. 정확한 범위 한계는 부동소수점 산술로 인해 약간씩 달라질 수 있습니다.
radius 인자가 존재하지만
양수가 아니면
ER_NONPOSITIVE_RADIUS
오류가 발생합니다.
거리가 배정밀도(double-precision)
수의 범위를 초과하면
ER_STD_OVERFLOW_ERROR
오류가 발생합니다.
1mysql> SET @pt1 = ST_GeomFromText('POINT(0 0)'); 2mysql> SET @pt2 = ST_GeomFromText('POINT(180 0)'); 3mysql> SELECT ST_Distance_Sphere(@pt1, @pt2); 4+--------------------------------+ 5| ST_Distance_Sphere(@pt1, @pt2) | 6+--------------------------------+ 7| 20015042.813723423 | 8+--------------------------------+
인자가 기하학적으로 유효하면 1을, 기하학적으로 유효하지 않으면 0을 반환합니다. geometry의 유효성은 OGC 명세(OGC specification)에 의해 정의됩니다.
유효한 빈 geometry는 빈 geometry collection 값의 형태로
표현되는 것만 허용됩니다.
이 경우
ST_IsValid()는 1을 반환합니다.
MySQL은 POINT EMPTY와 같은 GIS EMPTY
값을 지원하지 않습니다.
ST_IsValid()는
서론에서 설명한 대로 인자를 처리하되, 다음과 같은 예외가 있습니다:
geometry가 범위를 벗어난 경도 또는 위도를 갖는 지리 SRS를 가지면 오류가 발생합니다:
경도 값이 범위 (−180, 180] 내에 있지 않으면
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
오류가 발생합니다.
위도 값이 범위 [−90, 90] 내에 있지 않으면
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
오류가 발생합니다.
표시된 범위는 도 단위입니다. 어떤 SRS가 다른 단위를 사용하면, 해당 범위는 그 단위의 값으로 표현됩니다. 정확한 범위 한계는 부동소수점 산술로 인해 약간씩 달라질 수 있습니다.
1mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,-0.00 0,0.0 0)'); 2mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 1 1)'); 3mysql> SELECT ST_IsValid(@ls1); 4+------------------+ 5| ST_IsValid(@ls1) | 6+------------------+ 7| 0 | 8+------------------+ 9mysql> SELECT ST_IsValid(@ls2); 10+------------------+ 11| ST_IsValid(@ls2) | 12+------------------+ 13| 1 | 14+------------------+
두 점을 둘러싸는 엔벌로프(envelope)를 이루는 사각형을
Point,
LineString, 또는 Polygon으로 반환합니다.
계산은 구, 타원체(spheroid) 또는 지구가 아니라 데카르트 좌표계(Cartesian coordinate system)를 사용하여 수행됩니다.
두 점 pt1 및
_pt2_가 주어지면,
ST_MakeEnvelope()는
추상적인 평면에서 결과 geometry를 다음과 같이 생성합니다:
_pt1_와
_pt2_가 같으면, 결과는
점 _pt1_입니다.
그렇지 않고 (pt1, pt2)가 수직 또는
수평 선분(line segment)이면, 결과는
(pt1, pt2) 선분입니다.
그 밖의 경우, 결과는
pt1 및
_pt2_를 대각선상의 점으로 사용하는 폴리곤(polygon)입니다.
결과 geometry의 SRID는 0입니다.
ST_MakeEnvelope()는
서론에서 설명한 대로 인자를 처리하되, 다음과 같은 예외가 있습니다:
인자들이 Point 값이 아니면
ER_WRONG_ARGUMENTS
오류가 발생합니다.
두 점의 어떤 좌표 값이라도 무한대이거나
NaN인 추가 조건에 대해
ER_GIS_INVALID_DATA
오류가 발생합니다.
geometry 중 어떤 것이든 지리 공간 참조 시스템(geographic spatial
reference system, SRS)에 대한 SRID 값을 가지면
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
오류가 발생합니다.
1mysql> SET @pt1 = ST_GeomFromText('POINT(0 0)'); 2mysql> SET @pt2 = ST_GeomFromText('POINT(1 1)'); 3mysql> SELECT ST_AsText(ST_MakeEnvelope(@pt1, @pt2)); 4+----------------------------------------+ 5| ST_AsText(ST_MakeEnvelope(@pt1, @pt2)) | 6+----------------------------------------+ 7| POLYGON((0 0,1 0,1 1,0 1,0 0)) | 8+----------------------------------------+
Douglas-Peucker 알고리즘을 사용하여 geometry를 단순화하고, 동일한 타입의 단순화된 값을 반환합니다.
geometry는 어떤 geometry 타입이든 될 수 있지만, Douglas-Peucker 알고리즘이 실제로 모든 타입을 처리하는 것은 아닐 수 있습니다. geometry collection은 그 구성 요소들을 하나씩 단순화 알고리즘에 넘겨서 처리하며, 반환된 geometry들을 geometry collection으로 묶어 결과로 제공합니다.
max_distance 인자는
제거될 다른 선분에 대한 버텍스(vertex)의 거리(입력 좌표의 단위)를 나타냅니다.
단순화된 linestring으로부터 이 거리 이내에 있는 버텍스는 제거됩니다.
Boost.Geometry에 따르면, 단순화 과정의 결과로 geometry가
유효하지 않게 될 수 있으며, 이 과정이 자기 교차(self-intersection)를
생성할 수도 있습니다. 결과의 유효성을 확인하려면, 그 결과를
ST_IsValid()에 전달하십시오.
ST_Simplify()는
서론에서 설명한 대로 인자를 처리하되, 다음과 같은 예외가 있습니다:
max_distance 인자가
양수가 아니거나 NaN이면
ER_WRONG_ARGUMENTS 오류가
발생합니다.1mysql> SET @g = ST_GeomFromText('LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3)'); 2mysql> SELECT ST_AsText(ST_Simplify(@g, 0.5)); 3+---------------------------------+ 4| ST_AsText(ST_Simplify(@g, 0.5)) | 5+---------------------------------+ 6| LINESTRING(0 0,0 1,1 1,2 3,3 3) | 7+---------------------------------+ 8mysql> SELECT ST_AsText(ST_Simplify(@g, 1.0)); 9+---------------------------------+ 10| ST_AsText(ST_Simplify(@g, 1.0)) | 11+---------------------------------+ 12| LINESTRING(0 0,3 3) | 13+---------------------------------+
OGC 명세에 따라 geometry를 검증합니다.
geometry는 구문적으로 잘 형식화된(WKB 값과 SRID)
상태이면서도 기하학적으로는 유효하지 않을 수 있습니다.
예를 들어 다음 polygon은 기하학적으로 유효하지 않습니다:
POLYGON((0 0, 0 0, 0 0, 0 0, 0 0))
ST_Validate()는
geometry가 구문적으로 잘 형식화되어 있고
기하학적으로 유효하면 그 geometry를 반환합니다.
인자가 구문적으로 잘 형식화되어 있지 않거나
기하학적으로 유효하지 않거나 NULL이면
NULL을 반환합니다.
ST_Validate()는
비유효 geometry 데이터를 걸러내는 데 사용할 수 있지만,
그만큼 비용이 듭니다. 보다 정확한 결과를 요구하며
비유효 데이터에 의해 오염되지 않은 결과가 필요한 애플리케이션의 경우,
이 비용을 치를 가치가 있을 수 있습니다.
geometry 인자가 유효하면, 해당 geometry는 그대로 반환되지만,
입력 Polygon 또는
MultiPolygon이 시계 방향의 링(ring)을 가지는 경우,
유효성을 검사하기 전에 그 링들이 반전됩니다.
geometry가 유효하면, 링이 반전된 값이
반환됩니다.
유효한 빈 geometry는 빈 geometry collection 값의 형태로
표현되는 것만 허용됩니다.
이 경우
ST_Validate()는
추가 검사 없이 이를 그대로 반환합니다.
ST_Validate()는
서론에서 설명한 대로 인자를 처리하되, 여기 나열된 예외가 있습니다:
geometry가 범위를 벗어난 경도 또는 위도를 갖는 지리 SRS를 가지면 오류가 발생합니다:
경도 값이 범위 (−180, 180] 내에 있지 않으면
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
오류가 발생합니다.
위도 값이 범위 [−90, 90] 내에 있지 않으면
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
오류가 발생합니다.
표시된 범위는 도 단위입니다. 정확한 범위 한계는 부동소수점 산술로 인해 약간씩 달라질 수 있습니다.
1mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0)'); 2mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 1 1)'); 3mysql> SELECT ST_AsText(ST_Validate(@ls1)); 4+------------------------------+ 5| ST_AsText(ST_Validate(@ls1)) | 6+------------------------------+ 7| NULL | 8+------------------------------+ 9mysql> SELECT ST_AsText(ST_Validate(@ls2)); 10+------------------------------+ 11| ST_AsText(ST_Validate(@ls2)) | 12+------------------------------+ 13| LINESTRING(0 0,1 1) | 14+------------------------------+
14.16.12 Spatial Aggregate Functions
14.17 JSON Functions