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 진수로 변환하고 저장하십시오. 나는 이것이 가장 안전하다는 것을 오랫동안 알고 있습니다.
'Program Club' 카테고리의 다른 글
| C에서 nanosleep ()을 사용하는 방법? (0) | 2020.10.23 |
|---|---|
| gcc에서 인수가없는 것으로 정의 된 함수에 인수를 전달할 수있는 이유는 무엇입니까? (0) | 2020.10.23 |
| AndroidManifest xml 파일에서 android : supportsRtl =“true”사용은 무엇입니까? (0) | 2020.10.23 |
| POSIX 시스템에서 argc가 0이 될 수 있습니까? (0) | 2020.10.23 |
| 레일에서 파괴시 '검증'하는 방법 (0) | 2020.10.23 |