C #에서 지리적 위치 데이터를 저장할 때 사용하는 가장 좋은 데이터 유형은 무엇입니까? 정확성을 위해 십진수를 사용하지만 십진수 부동 소수점 숫자에 대한 연산은 이진 부동 소수점 숫자 (double)보다 느립니다.
대부분의 경우 위도 또는 경도에 대해 6 ~ 7 자리의 정밀도가 더 이상 필요하지 않다고 읽었습니다. 복식의 부정확성이 중요할까요 아니면 무시할 수 있나요?
C #에서 지리적 위치 데이터를 저장할 때 사용하는 가장 좋은 데이터 유형은 무엇입니까? 정확성을 위해 십진수를 사용하지만 십진수 부동 소수점 숫자에 대한 연산은 이진 부동 소수점 숫자 (double)보다 느립니다.
대부분의 경우 위도 또는 경도에 대해 6 ~ 7 자리의 정밀도가 더 이상 필요하지 않다고 읽었습니다. 복식의 부정확성이 중요할까요 아니면 무시할 수 있나요?
double
, double
가장 적합한 수 있습니다.
답변:
갈 double
몇 가지 이유가있다.
double은 최대 15 자리의 정밀도를 갖습니다. 따라서 위도 / 경도 값 (최대 180deg)에 대해이 숫자 중 세 자리가 소수점 왼쪽에 있다고 가정합니다. 오른쪽에 12 자리 정밀도가 남습니다. 위도 / 경도가 ~ 111km이므로이 12 자리 중 5 자리는 미터에 대한 정밀도를 제공합니다. 3 자리가 더 있으면 밀리미터 단위의 정밀도를 얻을 수 있습니다. 나머지 4 자리는 약 100 나노 미터의 정밀도를 얻을 수 있습니다. double은 성능과 기억력의 관점에서 이길 것이기 때문에 십진수 사용을 고려할 이유조차 없습니다.
나는 꽤 오래 전에 공간 프로그래밍을 시작할 때이 질문에 직면했습니다. 나는 이것으로 나를 이끌었던 책을 얼마 전에 읽었다.
//sql server has a really cool dll that deals with spacial data such like
//geography points and so on.
//add this namespace
Using Microsoft.SqlServer.Types;
//SqlGeography.Point(dblLat, dblLon, srid)
var lat_lon_point = Microsoft.SqlServer.Types.SqlGeography.Point(lat, lon, 4326);
공간 데이터를 사용하여 응용 프로그램에서 작업 할 때 가장 좋은 방법입니다. 그런 다음 데이터를 저장하려면 SQL에서 이것을 사용하십시오.
CREATE TABLE myGeoTable
{
LatLonPoint GEOMETRY
}
그렇지 않으면 SQL이 아닌 다른 것을 사용하는 경우 포인트를 16 진수로 변환하고 저장하십시오. 나는 이것이 가장 안전하다는 것을 오랫동안 알고 있습니다.
더블
답변을 결합하면 Microsoft가 SqlGeography 라이브러리에서 자신을 나타내는 방법입니다.
[get : Microsoft.SqlServer.Server.SqlMethod (IsDeterministic = true, IsPrecise = true)] public System.Data.SqlTypes.SqlDouble Lat {get; } 속성 값 SqlDouble 위도를 지정하는 SqlDouble 값입니다.