3

在 MySQL 中,我有一个包含大约 100 个表的数据库。

它们都包含一个名为“shape”的列,这是一个多边形类型字段。

它包含我认为的信息(st_srid 返回 1,但它是错误的)是 SRID 31287。

我想将其转换为 SRID 4326,我将如何去做呢?

更新 这是一个非常古老的问题,有非常古老的答案,最近提交了一个新答案,恕我直言,如果版本控制正确,则使用该方法。我没有将新答案标记为正确,因为这对在提问时给出正确答案的人不公平。但是,如果您使用的是版本 8,请按照 UncertaintyP 对这个问题的回答:https ://stackoverflow.com/a/65314337/2973474

4

5 回答 5

2

你这里有两个问题。

  1. 您的内部表示是错误的,它是 SRID 1,它应该是 SRID 31287。在每个数据库中都可以更改内部表示:MySQL 将在版本 8 中为它获取一个 mutatorST_SRID,PostGIS 有ST_SetSRID
  2. 您实际上需要从 SRID 31287 转换为 SRID 4326。这在 PostGIS 中可行。MySQLMicrosoft SQL都不能重新投影 SRID。

要解决 PostGIS 中的第一个问题,您将使用ST_SetSRID,并解决您将使用的第二个问题ST_Transform

于 2017-11-29T18:39:08.483 回答
2

为找到解决这个问题的迷失灵魂在 MySQL 中的转换更新:

在版本 8 中,您现在拥有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) |
+---------------------------------------------+
于 2020-12-15T22:03:10.453 回答
-1

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

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

希望这可以帮助

于 2017-03-13T16:46:35.137 回答
-1

这对我有用

(对于 MySQL)

UPDATE Table SET SpatialColumn = ST_GeomFromText(ST_AsText(SpatialColumn), 4326);
于 2017-08-16T06:03:38.793 回答
-2

我只能希望这将帮助您(直接或作为指针)作为 SQL Server 的答案,但是如何...

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

当然,如果您使用 Geography 列,则可以将 Geometry 交换为 Geography。您需要将 Table 替换为您的表名,并将 SpatialColumn 替换为您的空间列的名称。

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

于 2014-02-19T15:29:12.547 回答