나는 여기에서이 질문을 읽고 있었다 :
SQL 데이터베이스에 위도 및 경도 데이터를 저장할 때 사용할 데이터 유형은 무엇입니까?
그리고 일반적인 합의는 Decimal (9,6)을 사용하는 것이 갈 길이라는 것입니다. 제 질문은 이것이 얼마나 정확한가요?
예를 들어 Google의 API는 다음과 같은 결과를 반환합니다.
"lat": 37.4219720,
"lng": -122.0841430
-122.0841430 중 몇 자리가 필요합니까? 나는 여러 가이드를 읽었지만 그것들을 이해하기에는 충분히 이해할 수 없습니다.
내 질문에 대해 더 정확하게 말하면 : 정확한 위치에서 50 피트 이내의 정확도를 유지하려면 몇 개의 소수점을 저장해야합니까?
아마도 더 나은 질문은 실제로 비 프로그래밍 질문 일 것입니다. 그러나 그것은 각 소수점이 얼마나 더 정확할까요?
간단합니까?
- 목록 항목
- x00 = 6000 마일
- xx0 = 600 마일
- xxx = 60 마일
- xxx.x = 6 마일
- xxx.xx = .6 마일
- 기타?
답변
적도에서의 정확도 대 소수 자릿수
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 자리의 위도와 경도가 표시됩니다.