2013-10-04 4 views
0

일부 POI를 저장하는 테이블이 있으므로 일부 ID, 이름, 위도 및 경도가 있습니다. 문제는 내가 데이터베이스에서 동일한 좌표를 가진 POI를 두 번 가지길 원치 않는다는 것입니다. (8 개 번호기본 키로 좌표

  • 는 위도와 경도의 조합으로 기본 키를 만들 ...하지만 그들은 수레, 그래서 그것은 좋은 생각
  • 열 INT (16)을 만들지입니다 : 내가 생각 가능성이 있습니다 위도와 경도의 8을 병합했습니다.)하지만 데이터를 복제하는 것과 같습니다. 공간이 많이 걸립니다.
  • 위도와 경도에서 해시를 만들어 기본 키로 설정했지만 걱정됩니다 큰 숫자가 될 수도 있습니다.

어떻게 할 수 있었습니까? 따라서 많은 공간을 차지하지 않습니다. DB에있는 e?

+0

1. 왜 떠 다니는가? 십진법은 부적절한가요? 2. 나는 당신이 십진법을 만들고 (위도, 경도)에 유일 열쇠를 설정할 것을 제안한다. 좌표가 결코 움직이지 않는다고 확신하지 않는 한, PK로 사용하지 않는 것이 가장 좋습니다. – Strawberry

+0

좌표가 부동 소수점 데이터이고 이전 계산의 오류가있는 경우 이상적으로 같을 좌표가 같지 않으면 다른 형식으로 변환하거나 해시하면 일반적으로 동일한 결과가 생성되지 않습니다. 좌표가 같은 점을 참조하는지 여부를 먼저 확인해야합니다. 왜 부동 소수점 데이터가 같은 포인트에 대해 동일한 값을 가지지 않을 수 있다고 생각합니까? –

답변

0

경도와 위도 각각을 각각 1e7 (10 억)을 곱하여 4 바이트 정수로 변환 할 수 있습니다. 다음은 필요한 모든 정밀도 (3cm)를 제공하는 정수입니다.

이제 두 개의 4 바이트 정수를 하나의 8 바이트 길이로 결합하십시오.

데이터베이스가 오래 지원하는지 확실하지 않습니다.

관련 문제