MySQL空间 - 从SRID 31287转换为4326

3
在MySQL中,我有一个包含大约100个表的数据库。它们都包含一个名为“shape”的列,这是一个多边形类型字段。它包含的信息是SRID 31287(尽管st_srid返回1,但是这是错误的)。我想将其转换为SRID 4326,我该如何做?更新:这是一个非常古老的问题,有很久以前的答案,最近提交了一个新答案,如果版本正确,那么这就是IMHO要使用的方法。我不会将新答案标记为正确,因为这对于在问题提出时给出正确答案的人是不公平的。然而,如果您使用的是版本8,请按照UncertaintyP在此问题的回答:https://dev59.com/c3zaa4cB1Zd3GeqPS6yT#65314337

请查看我的答案,因为被选中的答案是完全错误的。https://dev59.com/c3zaa4cB1Zd3GeqPS6yT#47559573 - Evan Carroll
5个回答

3
MySQL 中的转换更新,以下是针对此问题迷茫的人的简述:
在 8 版本中,你现在可以使用 ST_Transform 函数。该函数与空间运算符一起使用。详情请参考:ST_Transform
mysql> SET @p = ST_GeomFromText('POINT(52.381389 13.064444)', 4326);
mysql> SELECT ST_AsText(@p);
+----------------------------+
| ST_AsText(@p)              |
+----------------------------+
| POINT(52.381389 13.064444) |
+----------------------------+
mysql> SET @p = ST_Transform(@p, 4230);
mysql> SELECT ST_AsText(@p);
+---------------------------------------------+
| ST_AsText(@p)                               |
+---------------------------------------------+
| POINT(52.38208611407426 13.065520672345304) |
+---------------------------------------------+

1
我会更新我的问题以突出这个答案。感谢您回答这么老的问题。 - alexisdevarennes

2

2
没错 - 我在开发过程中切换到了PostGIS。不知道为什么那个答案被标记为正确的。 - alexisdevarennes

-1

这对我起作用了

(对于MySQL)

UPDATE Table SET SpatialColumn = ST_GeomFromText(ST_AsText(SpatialColumn), 4326);

这会改变SRID值,但不会转换数据本身,这将使其无效。 - Brideau

-1

在MySQL中,它看起来像这样:

UPDATE `table name` SET `column name` = ST_GeomFromText(ST_AsText(`column name`), 4326);

希望这能有所帮助。

-2

我只能希望这篇文章能对你有所帮助(无论是直接还是作为一个指针),虽然它是针对 SQL Server 的,但也许...

UPDATE Table SET SpatialColumn = Geometry::STGeomFromText(SpatialColumn.STAsText(), 4326);

如果您使用地理列,自然可以将几何替换为地理。您需要将Table替换为您的表名,将SpatialColumn替换为您的空间列名称。

注意:这假定您的SRID 31287将坐标定义为十进制纬度/经度值。


这与MySQL有什么关系? - Evan Carroll
2
@EvanCarroll 当然,设置SRID不会转换坐标。当我回答问题时,我误读了问题,只是想纠正/转换SRID值。但是关于“这与MySQL有什么关系?”-绝对没有任何关系,但由于没有其他人提供帮助,我希望SQL答案(这是我知道的)可以帮助设置OP方向,并在答案中甚至声明了这一点。然而,幸运的是,对于未来的观众,您提供了更好和正确的答案。 - Jon Bellamy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接