MySQL에서 lng / lat을 저장하기위한 데이터 유형


14

MySQL 데이터베이스에 큰 lnt / lat 포인트 목록을 저장하고 있습니다. 현재 이들은 영국에서 M으로 예상되는 포인트이지만 장기적으로는 전 세계의 포인트 좌표를 저장할 수 있기를 원합니다. 어떤 데이터 유형을 사용해야합니까?

사용하기 시작 decimal(18,12)했지만이 정밀도가 필요한지 또는를 사용할 수 있는지 확실하지 않았습니다 float. 고려해야 할 다른 것이있는 경우 코드를 포함 시켰습니다.

CREATE TABLE UKTest
(
lat FLOAT,
lng FLOAT
)

SQL을 처음 접했기 때문에 쿼리를 실행할 때 데이터 유형이 중요한지 확실하지 않습니다. 전체 메모리가 변수 유형에 따라 다를 것이라고 가정했습니다. 이 유형의 작업에 기본 MySQL 데이터베이스보다 공간 데이터베이스를 사용하면 이점이 있습니까?

답변:


16

질문은 StackOverlow에서도 요청되었습니다 .

최고 답변은 MySQL Spatial Extensions 입니다. 이러한 확장 작업에 대한 링크는 여기에 있습니다 .

공간 유형을 사용하지 않고 GPS 단위 또는 지오 코딩 서비스에서 값을 얻는 경우 십진 정밀도를 데이터 소스에 일치시킬 수 있습니다. 일반적인 경험 법칙은 데이터를 응용 프로그램에 표시하는 것보다 두 곳 이상의 정확도로 데이터를 저장하는 것입니다.

Google 에서지도에 포인트를 표시 하는 코드 예제에서 다음 과 같이 말합니다.

MySQL 테이블을 작성할 때 lat 및 lng 속성에 특히주의해야합니다. Google지도의 현재 확대 / 축소 기능을 사용하면 소수점 뒤에 6 자리의 정밀도 만 있으면됩니다.

테이블에 필요한 스토리지 공간을 최소로 유지하려면 lat 및 lng 속성이 크기의 부동 소수점 (10,6)임을 지정할 수 있습니다. 그러면 필드에 소수점 이하 6 자리와 소수점 이하 최대 4 자리를 저장할 수 있습니다 (예 : -123.456789도).

숫자 유형 간의 성능 차이에 대해 걱정하지 않습니다. 알맞은 지수는 훨씬 더 큰 영향을 미칩니다.


좋은 답변을 얻으려면 +1하십시오! 이것이 내가 말하고 행한 것입니다.
OptimizePrime

답변 주셔서 감사합니다-MySQL Spatial Extensions 설명서를 읽었지만 어떻게 사용합니까? GoDaddy에 기본 MySQL DB가 있습니다. 어디서부터 시작해야할지 모르겠습니다.
djq


1
더 많은 링크에 대한 링크로 업데이트되었습니다.
geographika

왜 4 자리 정수?
Alix Axel

6

다른 이유로 MySQL에 묶여 있지 않는 한 이러한 세부 정보를 처리하기 위해 Point (및 Line, Polygon 등) 객체가있는 postgis와 같이 공간적으로 활성화 된 데이터베이스를 사용하는 것이 좋습니다. 전 세계를 변화시킬 때에도 프로젝션 지원을받을 수 있습니다.

2019 : 의견을 읽지 않는 나와 같은 사람들을 위해-MySQL은 증거없이 공간 데이터 유형을 지원합니다.


참고 : MySql 5.7+는 처음 사용하는 사용자를 위해 공간 인덱스와 함께 작동합니다.
HopeKing

그러나 아직 느리다
Ian Turton

당신은 얼마나 느린 보여줍니다 리소스에 도움을 줄 수 있습니까? 레코드가 백만 개 미만인 프로젝트에서 사용하는 것을 고려하고 있습니다. 감사.
HopeKing

개인 경험은 공개 데이터가 없습니다. 유효하지 않은 지오메트리와 관련된 문제가 너무 많음
Ian Turton

감사. 데이터베이스 레코드를 기반으로 포인트 사이의 거리가 필요합니다 (Polygon과 같은 복잡한 요구 사항 없음). 지금은 mysql을 사용하는 것이 안전 할 것입니다.
HopeKing
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.