[Tips]High and low precision spatial references
지오데이터베이스(GeoDatabase - personal geodatabase, file geodatabase, ArcSDE)에서 9.2 버전부터 high-precision spatial reference를 default로 사용한다.
9.2 이전 버전의 low-precision spatial reference를 사용하는 지오데이터베이스 피쳐클래스의 spatial reference 정보를 이용하여 high-precision 지오데이터베이스에 FeaureClass를 생성하는 경우에 다음과 같은 오류가 발생하는 경우가 있다.
<Cannot create a low precision dataset in a high precision database>
또는
<The XY domain on the spatial reference is not set or invalid>
다음은 이 오류를 해결하는 방법을 설명하며, 전체 코드는 마지막 ④ 해결을 위한 전체 코드를 참고하면 된다.
① 현재 접속한 Workspace가 High-Precision Workspace인지를 판별하는 방법
다음 코드는 현재 접속한 Workspace가 high-precision을 사용하는 workspace인지를 판별하는 코드이다.
[code c#]
private bool IsHighPrecisionWorkspace(IWorkspace Workspace)
{
bool isHighPrecision = false;
if (Workspace is IWorkspaceProperties)
{
IWorkspaceProperties ipWsProps = (IWorkspaceProperties)Workspace;
IWorkspaceProperty ipProp = ipWsProps.get_Property(
esriWorkspacePropertyGroupType.esriWorkspacePropertyGroup,
(int)esriWorkspacePropertyType.esriWorkspacePropSupportsHighPrecisionStorage);
if (ipProp.IsSupported)
{
isHighPrecision = Convert.ToBoolean(ipProp.PropertyValue);
}
}
return isHighPrecision;
}
[/code]
② How to construct a high- or low-precision spatial reference
출처 : http://resources.esri.com/help/9.3/ArcGISEngine/dotnet/0682A7EC-2C4D-4e93-B664-957A1AE7185A.htm
다음 코드는 high-precision spatial reference와 low-precision spatial reference를 생성하며, 각 precision에 맞는 default resolution and default tolerance를 설정하는 코드이다.
출처 : http://resources.esri.com/help/9.3/ArcGISEngine/dotnet/A98B72CF-A833-4dc8-A4D3-48F5044210FF.htm
이 문서 및 샘플 코드는 low-precision spatial reference (pre-9.2)를 high-precision spatial reference로 변환하는 예이다.
다음 코드는 low-precision spatial reference를 사용하는 FeatureClass와 동일한 필드 및 spatial reference를 사용하는 FeatureClass를 high-precision Workspace에 생성하는 코드이다.
IsHighPrecision, ConstructFromHorizon, SetDefaultXYResolution, SetDefaultXYTolerance가 이 코드의 핵심이다.
9.2 이전 버전의 low-precision spatial reference를 사용하는 지오데이터베이스 피쳐클래스의 spatial reference 정보를 이용하여 high-precision 지오데이터베이스에 FeaureClass를 생성하는 경우에 다음과 같은 오류가 발생하는 경우가 있다.


다음은 이 오류를 해결하는 방법을 설명하며, 전체 코드는 마지막 ④ 해결을 위한 전체 코드를 참고하면 된다.
① 현재 접속한 Workspace가 High-Precision Workspace인지를 판별하는 방법
다음 코드는 현재 접속한 Workspace가 high-precision을 사용하는 workspace인지를 판별하는 코드이다.
[code c#]
private bool IsHighPrecisionWorkspace(IWorkspace Workspace)
{
bool isHighPrecision = false;
if (Workspace is IWorkspaceProperties)
{
IWorkspaceProperties ipWsProps = (IWorkspaceProperties)Workspace;
IWorkspaceProperty ipProp = ipWsProps.get_Property(
esriWorkspacePropertyGroupType.esriWorkspacePropertyGroup,
(int)esriWorkspacePropertyType.esriWorkspacePropSupportsHighPrecisionStorage);
if (ipProp.IsSupported)
{
isHighPrecision = Convert.ToBoolean(ipProp.PropertyValue);
}
}
return isHighPrecision;
}
[/code]
② How to construct a high- or low-precision spatial reference
출처 : http://resources.esri.com/help/9.3/ArcGISEngine/dotnet/0682A7EC-2C4D-4e93-B664-957A1AE7185A.htm
다음 코드는 high-precision spatial reference와 low-precision spatial reference를 생성하며, 각 precision에 맞는 default resolution and default tolerance를 설정하는 코드이다.
펼쳐두기..
③ How to convert between high and low precision spatial references출처 : http://resources.esri.com/help/9.3/ArcGISEngine/dotnet/A98B72CF-A833-4dc8-A4D3-48F5044210FF.htm
이 문서 및 샘플 코드는 low-precision spatial reference (pre-9.2)를 high-precision spatial reference로 변환하는 예이다.
펼쳐두기..
④ 오류 해결을 위한 전체 코드다음 코드는 low-precision spatial reference를 사용하는 FeatureClass와 동일한 필드 및 spatial reference를 사용하는 FeatureClass를 high-precision Workspace에 생성하는 코드이다.
IsHighPrecision, ConstructFromHorizon, SetDefaultXYResolution, SetDefaultXYTolerance가 이 코드의 핵심이다.
펼쳐두기..
댓글
댓글 쓰기