

# Babelfish에서 지리공간 데이터 유형 지원
<a name="babelfish-geospatial"></a>

버전 3.5.0 및 4.1.0부터 Babelfish는 다음 두 가지 공간 데이터 유형에 대한 지원을 포함합니다.
+ **기하학 데이터 유형** - 이 데이터 유형은 평면, 즉 유클리드(평평한 지구) 데이터를 저장하기 위한 것입니다.
+ **지리학 데이터 유형** - 이 데이터 유형은 GPS 위도 및 경도 좌표와 같은 타원체, 즉 둥근 지구 데이터를 저장하는 데 사용됩니다.

이러한 데이터 유형을 사용하면 공간 데이터를 저장하고 조작할 수 있지만 제한이 있습니다.

## Babelfish의 지리공간 데이터 유형 이해
<a name="babelfish-geospatial-overview"></a>
+ 지리공간 데이터 유형은 뷰, 프로시저 및 테이블과 같은 다양한 데이터베이스 객체에서 지원됩니다.
+ 포인트 데이터 유형을 지원하여 위치 데이터를 위도, 경도 및 유효한 공간 참조 시스템 식별자(SRID)로 정의된 포인트로 저장할 수 있습니다. 포인트는 Z(고도), M(측정) 값을 포함할 수 있으며 비어 있을 수 있습니다.
+ 일련의 점과 이들을 연결하는 선분 및 유효한 공간 참조 시스템 식별자(SRID)로 정의되는 라인스트링 데이터 유형(버전 5.4.0부터)을 지원합니다. 라인스트링은 Z(고도), M(측정) 값이 있는 포인트를 포함할 수 있으며 비어 있을 수 있습니다.
+ JDBC, ODBC, DOTNET, PYTHON과 같은 드라이버를 통해 Babelfish에 연결하는 애플리케이션은 이 지리공간 기능을 활용할 수 있습니다.

### Babelfish에서 지원하는 기하학 데이터 유형 함수
<a name="babelfish-geospatial-overview-geometry"></a>
+ **STGeomFromText({{geometry\_tagged\_text}}, SRID)** - WKT(Well-Known Text) 표현을 사용하여 기하학 인스턴스를 만듭니다.
+ **STPointFromText({{point\_tagged\_text}}, SRID)** - WKT 표현을 사용하여 포인트 인스턴스를 생성합니다.
+ **Point(X, Y, SRID)** - x 및 y 좌표의 부동 소수점 값을 사용하여 포인트 인스턴스를 만듭니다.
+ **<geometry\_instance>.STAsText ( )** - 기하학 인스턴스에서 WKT 표현을 추출합니다.
+ **<geometry\_instance>.STAsBinary ( )** - 기하학 인스턴스에서 WKB 표현을 추출합니다.
+ **<geometry\_instance>.STArea( )** - 기하학 인스턴스의 총 표면적을 계산합니다.
+ **<geometry\_instance>.STSrid( )** - 기하학 인스턴스의 공간 참조 식별자(SRID)를 추출합니다.
+ **<geometry\_instance>.STDimension( )** - 기하학 인스턴스의 공간 차원을 검색합니다.
+ **<geometry\_instance>.STIsEmpty( )** - 기하학 인스턴스가 비어 있는지 확인합니다.
+ **<geometry\_instance>.STIsClosed( )** - 기하학 인스턴스가 닫혀 있는지 확인합니다.
+ **<geometry\_instance>.STIsValid( )** - 기하학 인스턴스가 유효한지 확인합니다.
+ **<geometry\_instance>.STDistance(other\_geometry)** - 두 기하학 인스턴스 사이의 거리를 계산합니다.
+ **<geometry\_instance>.STEquals(other\_geometry)** - 기하학 인스턴스가 다른 기하학 인스턴스와 동일한 포인트 세트를 나타내는지 확인합니다.
+ **<geometry\_instance>.STContains(other\_geometry)** - 기하학 인스턴스에 other\_geometry 인스턴스가 포함되어 있는지 확인합니다.
+ **<geometry\_instance>.STDisjoint(other\_geometry)** - 두 기하학 인스턴스에 공통 포인트가 없는지 확인합니다.
+ **<geometry\_instance>.STIntersects(other\_geometry)** - 두 기하학 인스턴스가 공간적으로 교차하는지 확인합니다.
+ **<geometry\_instance>.STX** - 기하학 인스턴스의 X 좌표(경도)를 추출합니다.
+ **<geometry\_instance>.STY** - 기하학 인스턴스의 Y 좌표(위도)를 추출합니다.

버전 4.7.0 및 5.3.0부터 Babelfish는 다음 공간 데이터 함수에 대한 지원을 포함합니다.
+ **<geometry\_instance>.M** - 기하학 인스턴스의 M 좌표를 추출합니다.
+ **<geometry\_instance>.Z** - 기하학 인스턴스의 Z 좌표를 추출합니다.
+ **<geometry\_instance>.HasM** - 기하학 인스턴스에 M 값이 하나 이상 있는지 확인합니다.
+ **<geometry\_instance>.HasZ** - 기하학 인스턴스에 Z 값이 하나 이상 있는지 확인합니다.

버전 5.4.0부터 Babelfish는 다음 공간 데이터 함수에 대한 지원을 포함합니다.
+ **STLineFromText({{linestring\_tagged\_text}}, SRID )** - WKT 표현을 사용하여 라인스트링 인스턴스를 생성합니다.

### Babelfish에서 지원하는 지리학 데이터 유형 함수
<a name="babelfish-geospatial-overview-geography"></a>
+ **STGeomFromText({{geography\_tagged\_text}}, SRID)** - WKT 표현을 사용하여 지리학 인스턴스를 만듭니다.
+ **STPointFromText({{point\_tagged\_text}}, SRID)** - WKT 표현을 사용하여 포인트 인스턴스를 생성합니다.
+ **Point(Lat, Long, SRID)** - 위도 및 경도의 부동 소수점 값을 사용하여 포인트 인스턴스를 만듭니다.
+ **geography\_instance>.STAsText( )** - 지리학 인스턴스에서 WKT 표현을 추출합니다.
+ **<geography\_instance>.STAsBinary( )** - 지리학 인스턴스에서 WKB 표현을 추출합니다.
+ **<geography\_instance>.STArea( )** - 지리학 인스턴스의 총 표면적을 계산합니다.
+ **<geography\_instance>.STSrid( )** - 지리학 인스턴스의 공간 참조 식별자(SRID)를 추출합니다.
+ **<geography\_instance>.STDimension( )** - 지리학 인스턴스의 공간 차원을 검색합니다.
+ **<geography\_instance>.STIsEmpty( )** - 지리학 인스턴스가 비어 있는지 확인합니다.
+ **<geography\_instance>.STIsClosed( )** - 지리학 인스턴스가 닫혀 있는지 확인합니다.
+ **<geography\_instance>.STIsValid( )** - 지리학 인스턴스가 유효한지 확인합니다.
+ **geography\_instance>.STDistance(other\_geography)** - 두 지리학 인스턴스 사이의 거리를 계산합니다.
+ **<geography\_instance>.STEquals(other\_geography)** - 지리학 인스턴스가 다른 지리학 인스턴스와 동일한 포인트 세트를 나타내는지 확인합니다.
+ **<geography\_instance>.STContains(other\_geography)** - 지리학 인스턴스에 other\_geography 인스턴스가 포함되어 있는지 확인합니다.
+ **<geography\_instance>.STDisjoint(other\_geography)** - 두 지리학 인스턴스에 공통 포인트가 없는지 확인합니다.
+ **<geography\_instance>.STIntersects(other\_geography)** - 두 지리학 인스턴스가 공간적으로 교차하는지 확인합니다.
+ **<geography\_instance>.Lat** - 지리학 인스턴스의 위도 값을 추출합니다.
+ **<geography\_instance>.Long** - 지리학 인스턴스의 경도 값을 추출합니다.

버전 4.7.0 및 5.3.0부터 Babelfish는 다음 공간 데이터 함수에 대한 지원을 포함합니다.
+ **<geography\_instance>.M** - 지리학 인스턴스의 M 좌표를 추출합니다.
+ **<geography\_instance>.Z** - 지리학 인스턴스의 Z 좌표를 추출합니다.
+ **<geography\_instance>.HasM** - 지리학 인스턴스에 M 값이 하나 이상 있는지 확인합니다.
+ **<geography\_instance>.HasZ** - 지리학 인스턴스에 Z 값이 하나 이상 있는지 확인합니다.

버전 5.4.0부터 Babelfish는 다음 공간 데이터 함수에 대한 지원을 포함합니다.
+ **STLineFromText({{linestring\_tagged\_text}}, SRID )** - WKT 표현을 사용하여 라인스트링 인스턴스를 생성합니다.

## Babelfish에서 지원하는 지리공간 데이터 유형의 한계
<a name="babelfish-geospatial-limitations"></a>
+ 포인트 및 라인스트링 인스턴스 이외에 다음과 같은 기하학 및 지리학 유형은 현재 지원되지 않습니다.
  + CircularString
  + CompoundCurve
  + Polygon
  + CurvePolygon
  + MultiPoint
  + MultiLineString
  + MultiPolygon
  + GeometryCollection
+ 현재 공간 인덱싱은 지리공간 데이터 유형에 지원되지 않습니다.
+ 현재 이러한 데이터 유형에는 나열된 함수만 지원됩니다. 자세한 내용은 [Babelfish에서 지원하는 기하학 데이터 유형 함수](#babelfish-geospatial-overview-geometry) 및 [Babelfish에서 지원하는 지리학 데이터 유형 함수](#babelfish-geospatial-overview-geography)(을)를 참조하세요.
+ 지리학 데이터에 대한 STDistance 함수 출력값은 T-SQL과 비교하여 정밀도 차이가 약간 있을 수 있습니다. 이는 기본 PostGIS 구현 때문입니다. 자세한 내용은 [ST\_Distance](https://postgis.net/docs/ST_Distance.html)를 참조하세요.
+ 기하학 및 지리학 데이터 모두에서 STIsValid 함수 출력값은 T-SQL과 비교하여 약간의 차이가 있을 수 있습니다. 이로 인해 STDistance, STContains, STInstersects, STDisjoint, STDimension, STArea, STEquals 함수도 경우에 따라 T-SQL과 차이가 날 수 있습니다(오류를 발생시키는 대신 출력을 반환함). 이는 기본 PostGIS 구현 때문입니다. 자세한 내용은 [ST\_IsValid](https://postgis.net/docs/ST_IsValid.html)를 참조하세요.
+ 성능을 최적화하려면 Babelfish에서 추가 추상화 계층을 만들지 말고 기본 제공되는 지리공간 데이터 유형을 사용하세요.
+ Babelfish에서는 지리공간 함수 이름이 키워드로 사용되며 의도한 방식으로 사용하는 경우에만 공간 연산을 수행합니다.