Programing

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

lottogame 2020. 9. 2. 20:22
반응형

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


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

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 of a degree of latitude
  • 0.01524 / 111.320 = 1/7304 of a degree of longitude

You need four digits of scale, enough to go down to ten-thousandths of a degree, with a total of seven digits of precision.

DECIMAL(7,4) should be plenty for your needs.


Don't store floating point values. While you might assume they are accurate, they are not. They are an approximation. And it turns out different languages have different methods of "parsing" the floating point information. And different databases have different methods of implementing the value approximations.

Instead, use a Geohash. This video introduces and visually explains the Geohash in under 5 minutes. The Geohash is BY FAR the superior way to encode/decode longitude/latitude information in a consistent way. By never "serializing" the approximated floating point values of a longitude/latitude into database columns and instead, using a Geohash, you will get the same desirable round trip consistency guarantees you get with String values. This website is great for helping you play with a Geohash.


Taking into account the various parts of a sphere and a diagonal distance, here is a table of the precisions available:

   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


If you click locations on Google Maps, you get latitude and longitude with 7 decimal places

참고URL : https://stackoverflow.com/questions/7167604/how-accurately-should-i-store-latitude-and-longitude

반응형