2017-11-28 13 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と4行ですフィールド。

私が実行します。

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変換しようとしています:EPSGに4326を: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(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 

のでST_AsText(ST_GeomFromText(ST_AsText(g), 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を持つ場合、計算を拒否するだけです。

PostGISは、ST_Transformでこれを正常に実行します。ボーナスとして、より良いデータベースが得られます。

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

@EvanCarrollが答えたように、MySQLにはSRID認識がありません(現時点では)。しかし、あなたがそれを必要とし、私はSRIDのproj4php(免責事項:私はこのプロジェクトには関係がない)と完全に動作する間の座標を変換するためのクラスを見つけたPHPを使用している場合。

関連する問題