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.