2017-11-28 34 views
0

지형 공간 필드가 MySQL (5.7.20)에서 작동하는 방법을 배우려고합니다.MySQL Spatial - EPSG 4326에서 25831로 포인트 변환

나는이 같은 테이블 :

INSERT INTO geom VALUES (ST_PointFromText('POINT(2.427475 41.534244)', 4326)); 
INSERT INTO geom VALUES (ST_PointFromText('POINT(2.428602 41.533272)', 4326)); 
INSERT INTO geom VALUES (ST_PointFromText('POINT(2.430147 41.534075)', 4326)); 
INSERT INTO geom VALUES (ST_PointFromText('POINT(2.429321 41.535191)', 4326)); 

내가 실행 :이 정보를 삽입했다

CREATE TABLE `geom` (
    `g` geometry NOT NULL, 
    SPATIAL KEY `g` (`g`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

SELECT * FROM geom; 

내가 할 모든이 BLOB 네 개의 행이 들. 내가 삽입 한대로

SELECT ST_AsText(g) FROM geom; 

내가 같은 얻을 :

나는 실행하면

POINT(2.429321 41.535191) 
POINT(2.430147 41.534075) 
POINT(2.428602 41.533272) 
POINT(2.427475 41.534244) 

을 그리고 지금은 EPSG에서 출력 coordenates을 변환하려고 해요 : 4326 EPSG에 : 25831 .

나는 "MySQL Spatial - Convert from SRID 31287 to 4326"을 발견하고 대신 삽입의 선택에 그것을 시도하지만, SRID 변경 :

SELECT ST_AsText(g), ST_SRID(g), ST_AsText(ST_GeomFromText(ST_AsText(g), 25831)), ST_SRID(ST_GeomFromText(ST_AsText(g), 25831)) FROM geom; 

내가 얻을 :

는 그래서 ST_AsText(ST_GeomFromText(ST_AsText(g), 25831))의 결과가 나에게 같은 얻을 수
ST_AsText(g)    || ST_SRID(g) || ST_AsText(ST_GeomFromText(ST_AsText(g), 25831)) || ST_SRID(ST_GeomFromText(ST_AsText(g), 25831)) 
POINT(2.429321 41.535191) || 4326  || POINT(2.429321 41.535191)      || 25831 
POINT(2.430147 41.534075) || 4326  || POINT(2.430147 41.534075)      || 25831 
POINT(2.428602 41.533272) || 4326  || POINT(2.428602 41.533272)      || 25831 
POINT(2.427475 41.534244) || 4326  || POINT(2.427475 41.534244)      || 25831 

을 삽입 된 값으로 좌표.

내가 얻으려고하는 것은 EPSG : 4326에서 EPSG : 25831로 변환하는 것입니다. 뭔가 (또는 적어도 좌표) :

POINT(452240.56 4598224.20) 
POINT(452333.86 4598115.66) 
POINT(452463.33 4598203.96) 
POINT(452395.25 4598328.31) 

내가 뭘 잘못하고있어?

답변

0

MySQL doesn't have any SRID awareness. 그래서 이것은 단순히 불가능합니다. SRID가 SRID를 지원하는 정도까지는 SRID가 다른 경우 계산을 거부합니다.

원하는 것은 PostGIS입니다. 이는 ST_Transform으로 올바르게 처리됩니다. 보너스로, 당신은 더 나은 데이터베이스를 얻을 수 있습니다.

SELECT ST_Transform(pt,31287) 
FROM ST_SetSRID(ST_MakePoint(2.430147,41.534075), 4326) AS pt; 
0

@EvanCarroll이 대답 했으므로 MySQL에는 SRID 인식 기능이 없습니다 (현재). 하지만 PHP가 필요한 경우 SRID의 proj4php (면책 조항 :이 프로젝트와 관련이 없음)과 완벽하게 조화를 이룬 클래스를 찾았습니다.