我正在尝试了解地理空间字段在 MySQL (5.7.20) 中的工作方式。
我有一张像这样的桌子:
CREATE TABLE `geom` (
`g` geometry NOT NULL,
SPATIAL KEY `g` (`g`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
我已插入此信息:
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));
当我运行时:
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:4326 转换为 EPSG:25831。
我找到了“MySQL Spatial - 从 SRID 31287 转换为 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
所以 a 的结果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)
我做错了什么?