Program Club

C #의 위도 / 경도 값에 대한 이중 또는 소수

proclub 2020. 10. 23. 19:40
반응형

C #의 위도 / 경도 값에 대한 이중 또는 소수


C #에서 지리적 위치 데이터를 저장할 때 사용하는 가장 좋은 데이터 유형은 무엇입니까? 정확성을 위해 십진수를 사용하지만 십진수 부동 소수점 숫자에 대한 연산은 이진 부동 소수점 숫자 (double)보다 느립니다.

대부분의 경우 위도 또는 경도에 대해 6 ~ 7 자리의 정밀도가 더 이상 필요하지 않다고 읽었습니다. 복식의 부정확 함이 중요할까요 아니면 무시할 수 있나요?


double몇 가지 이유가있다.

  • 삼각 함수는 double 형에만 사용할 수 있습니다.
  • 이중 정밀도 (100 나노 미터 범위)는 위도 / 경도 값에 필요한 모든 것을 훨씬 뛰어 넘습니다.
  • GeoCoordinate 클래스 및 타사 모듈 (예 : DotSpatial )도 좌표에 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 진수로 변환하고 저장하십시오. 나는 이것이 가장 안전하다는 것을 오랫동안 알고 있습니다.

참고 URL : https://stackoverflow.com/questions/28068123/double-or-decimal-for-latitude-longitude-values-in-c-sharp

반응형