[mysql] 위도와 경도를 얼마나 정확하게 저장해야합니까?

나는 여기에서이 질문을 읽고 있었다 :

SQL 데이터베이스에 위도 및 경도 데이터를 저장할 때 사용할 데이터 유형은 무엇입니까?

그리고 일반적인 합의는 Decimal (9,6)을 사용하는 것이 갈 길이라는 것입니다. 제 질문은 이것이 얼마나 정확한가요?

예를 들어 Google의 API는 다음과 같은 결과를 반환합니다.

"lat": 37.4219720,
"lng": -122.0841430

-122.0841430 중 몇 자리가 필요합니까? 나는 여러 가이드를 읽었지만 그것들을 이해하기에는 충분히 이해할 수 없습니다.

내 질문에 대해 더 정확하게 말하면 : 정확한 위치에서 50 피트 이내의 정확도를 유지하려면 몇 개의 소수점을 저장해야합니까?

아마도 더 나은 질문은 실제로 비 프로그래밍 질문 일 것입니다. 그러나 그것은 각 소수점이 얼마나 더 정확할까요?

간단합니까?

  1. 목록 항목
  2. x00 = 6000 마일
  3. xx0 = 600 마일
  4. xxx = 60 마일
  5. xxx.x = 6 마일
  6. xxx.xx = .6 마일
  7. 기타?


답변

적도에서의 정확도 대 소수 자릿수

decimal  degrees    distance
places
-------------------------------  
0        1.0        111 km
1        0.1        11.1 km
2        0.01       1.11 km
3        0.001      111 m
4        0.0001     11.1 m
5        0.00001    1.11 m
6        0.000001   0.111 m
7        0.0000001  1.11 cm
8        0.00000001 1.11 mm

심판 : https://en.wikipedia.org/wiki/Decimal_degrees#Precision


답변

+----------------+-------------+
|    Decimals    |  Precision  |
+----------------+-------------+
|    5           |  1m         |
|    4           |  11m        |
|    3           |  111m       |
+----------------+-------------+

50ft (15m) 정밀도를 원하면 4 자리로 이동합니다. 그래서decimal(9,6)


답변

저는 데이터베이스를 설계하고이 질문을 한동안 연구 해 왔습니다. 우리는 데이터 필드가 소수점 17 자리를 허용하도록 정의 된 Oracle 백엔드와 함께 기성품 애플리케이션을 사용합니다. 어리석은! 그것은 천분의 일 인치입니다. 세상에 그렇게 정확한 GPS 기기는 없습니다. 따라서 소수점 17 자리를 제쳐두고 실용적으로 처리합시다. 정부는 그들의 시스템이 95 % 신뢰 수준에서 7.8 미터의 “최악의 경우”의사 거리 정확도에 적합하다고 보장하지만, 실제 FAA (고품질 장비 사용)가 GPS 판독 값이 일반적으로 좋은 것으로 나타났습니다. 미터 이내.

따라서 스스로에게 두 가지 질문을해야합니다. 1) 가치의 원천은 무엇입니까? 2) 데이터는 어디에 사용됩니까?

휴대 전화는 특히 정확하지 않으며 Google / MapQuest 판독 값은 소수점 이하 4 자리 또는 5 자리에 불과합니다. 고품질 GPS 기기는 6 개를받을 수 있습니다 (미국 내). 그러나 그 이상을 캡처하는 것은 입력 및 저장 공간 낭비입니다. 또한 값에 대한 검색이 수행되면 사용자가 6이 가장 많이 찾아야한다는 것을 아는 것이 좋습니다 (분명히 입력 된 모든 검색 값은 먼저 검색되는 데이터 값과 동일한 정확도로 반올림되어야합니다). ).

또한 Google지도에서 위치를 보거나 GPS에 저장하기 만하면 4 ~ 5 개면 충분합니다.

나는 여기 주변 사람들이 그 모든 숫자를 입력하는 것을 비 웃어야한다. 그리고 정확히 어디에서 측정을하고 있습니까? 현관 손잡이? 우편함이 앞에 있습니까? 건물의 중심? 기지국 꼭대기? 그리고 … 모두가 같은 장소에서 일관되게 복용하고 있습니까?

좋은 데이터베이스 설계로서, 저는 사용자로부터 5 자리 이상의 소수에 대한 값을 수락 한 다음 일관성을 위해 5 개만 반올림하고 캡처합니다 (기기가 양호하고 최종 사용이이를 보증하는 경우 6 개).


답변

각 위도 사이의 거리는 지구의 모양에 따라 달라지며 각 경도 사이의 거리는 극에 가까워 질수록 작아집니다. 따라서 각도 사이거리는 위도 110.574km, 경도 111.320km 인 적도에 대해 이야기 해 봅시다 .

50ft는 0.01524km이므로 :

  • 0.01524 / 110.574 = 위도의 1/7255
  • 0.01524 / 111.320 = 1/7304 경도

총 7 자리의 정밀도로 1 만분의 1도까지 내려갈 수있는 4 자리 스케일이 필요합니다.

DECIMAL(7,4) 당신의 필요에 충분해야합니다.


답변

구의 다양한 부분과 대각선 거리를 고려할 때 사용 가능한 정밀도 테이블은 다음과 같습니다.

   Datatype           Bytes       resolution
   ------------------ -----  --------------------------------
   Deg*100 (SMALLINT)     4  1570 m    1.0 mi  Cities
   DECIMAL(4,2)/(5,2)     5  1570 m    1.0 mi  Cities
   SMALLINT scaled        4   682 m    0.4 mi  Cities
   Deg*10000 (MEDIUMINT)  6    16 m     52 ft  Houses/Businesses
   DECIMAL(6,4)/(7,4)     7    16 m     52 ft  Houses/Businesses
   MEDIUMINT scaled       6   2.7 m    8.8 ft
   FLOAT                  8   1.7 m    5.6 ft
   DECIMAL(8,6)/(9,6)     9    16cm    1/2 ft  Friends in a mall
   Deg*10000000 (INT)     8    16mm    5/8 in  Marbles
   DOUBLE                16   3.5nm     ...    Fleas on a dog

-http : //mysql.rjweb.org/doc.php/latlng#representation_choices


답변

부동 소수점 값을 저장하지 마십시오. 정확하다고 생각할 수도 있지만 그렇지 않습니다. 근사치입니다. 그리고 다른 언어에는 부동 소수점 정보를 “파싱”하는 다른 방법이 있습니다. 그리고 데이터베이스마다 값 근사치를 구현하는 방법이 다릅니다.

대신 Geohash를 사용하십시오 . 이 비디오는 Geohash를 5 분 이내에 소개하고 시각적으로 설명합니다. Geohash는 일관된 방식으로 경도 / 위도 정보를 인코딩 / 디코딩하는 우수한 방법입니다. 경도 / 위도의 대략적인 부동 소수점 값을 데이터베이스 열로 “직렬화”하지 않고 대신 Geohash를 사용하면 문자열 값과 동일한 바람직한 왕복 일관성 보장을 얻을 수 있습니다. 이 웹 사이트는 Geohash를 사용하는 데 도움이됩니다.


답변

Google지도에서 위치를 클릭하면 소수점 이하 7 자리의 위도와 경도가 표시됩니다.