MySQL은 포인트 데이터 유형을 LAT LNG 또는 LNG LAT로 저장합니까?


9

위치 형식을 위도 및 경도로 보는 데 익숙하지만 라이브러리를 사용하면 MySQL을 POINT(LNG LAT)역순 으로 저장하는 것으로 이해 합니다. 내 라이브러리가 잘못되었거나 실제 형식입니까? MySQL 문서 에서이 세부 정보를 찾을 수없는 것 같습니다.


아마 이것을 읽을 수 있습니다 : stackoverflow.com/questions/159255/…
codedawg82

답변:


14

생성자 구문

위 찾는 공간 함수 참조를, 당신은 볼 수 있습니다

Point(x, y)
Constructs a Point using its coordinates

이것은 완전히 정확하지 않습니다. 모든 GIS 구현은 (x,y)투영 좌표에 대해 수행해야합니다 (long,lat). 그러나 측지 좌표계에서는해야 할 일에 대해 약간의 의견 차이가 있습니다. MySQL (및 SQL Server)은 수행 (lat,long)하지만 PostGIS는 (long,lat)모든 곳에서 유지 관리 됩니다.

이것은의에 터치 사양 지리 정보 OpenGIS® 구현 표준 - 단순 기능 액세스 - 제 2 부 : SQL 옵션을 ,

  • 타원체 2 차원 좌표계를 갖는 측지 CRS의 경우, 2 차원 타원체 좌표계 축은 측지 위도, 양의 북쪽, 측지 경도, 양의 동쪽을 따른다. 축 방향은 각각 '북쪽'과 '동쪽'이어야합니다.
  • 3 차원 타원체 좌표계를 갖는 측지 CRS의 경우, WKT 스트링에서 수평축의 명칭 및 약어는 (ii)의 요건을 따라야한다. 세로축 이름은 '타원체 높이'여야합니다. 세로 축 약어는 'h'이어야하며 가로 축에 약어가 포함될 때 포함되어야합니다.

위의 단어는 지리 정보-좌표 참조 시스템의 잘 알려진 텍스트 표현 에서 그대로 사용 됩니다.

심지어 까지 다시 1.1 사양으로,

좌표계라고도하는 공간 참조 시스템은 지리적 (위도-경도) , 투영 된 (X, Y) 또는 지심 중심 (X, Y, Z) 좌표계입니다.

즉, PostGIS와 Oracle 및 많은 타사 라이브러리 (x,y,[z])가 모든 유형의 포인트를 유지하는 것으로 보입니다 . 이것은 WKT 사양을 위반하는 것이지만 일반적인 관례입니다. 예를 들어 GeoJSON도이 작업을 수행합니다.

점 좌표는 x, y 순서입니다 (영점, 투영 된 좌표의 북쪽, 경도 및 지리적 좌표의 위도)

그리고, (lat, long) 순서는 EPSG에 의해 SRSID 4326에 대해 명시 적으로 정의된다 .

지리적 CRS에 사용되는 측지 위도, 측지 경도 및 타원체 높이 (3 차원의 경우)로 위치를 지정하는 2D 또는 3D 좌표 시스템입니다.

이 주제에 대해 Paul Ramsey (Captain PostGIS) 블로그에서 "전체를 불러 내자" 라는 제목의 블로그를 확인해보십시오.

귀족

특히, MySQL은 두 가지 새로운 기능을 믹스에 제공합니다.

이 함수는 옆에서 서서 ST_X()ST_Y()요구 지리적 SRS를하거나, 예외 및 오류를 throw합니다.

저장

에서 워드 프로세서

내부적으로 MySQL은 지오메트리 값을 WKT 또는 WKB 형식과 동일하지 않은 형식으로 저장합니다. 내부 형식은 WKB와 비슷하지만 SRID를 나타 내기 위해 초기 4 바이트입니다.

저장은 여기에 정의되어 있습니다 .

Table 11.1 WKB Components Example

Component       Size    Value
Byte order      1 byte  01
WKB type        4 bytes 01000000
X coordinate    8 bytes 000000000000F03F
Y coordinate    8 bytes 000000000000F0BF

0

순서를 확인하는 쉬운 방법은 위도를 벗어난 것입니다.

SELECT ST_Longitude(ST_SRID(POINT(45, 160), 4326));

오류 3732 (22S03)를 제공합니다. st_srid 함수의 매개 변수는 위도가 160.000000 인 범위를 벗어난 형상을 포함합니다. [-90.000000, 90.000000] 내에 있어야합니다.

사용하는 기능에 따라 순서가 변경 될 수 있습니다.

SELECT ST_Longitude(ST_SRID(POINT(45, 90), 4326));
SELECT ST_Longitude(ST_GeomFromText('POINT(45 90)', 4326));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.