MySQL Spatial - преобразование из SRID 31287 в 4326

В MySQL у меня есть база данных с около 100 таблиц.

Все они содержат столбец с именем "форма", это поле типа многоугольника.

Он содержит информацию, в которую я верю (st_srid возвращает 1, но это неверно) - это SRID 31287.

Я хотел бы преобразовать его в SRID 4326, как мне это сделать?

5 ответов

Решение

У вас есть две проблемы здесь.

  1. Ваше внутреннее представление неверно, это SRID 1, и это должен быть SRID 31287. Изменение внутреннего представления возможно в каждой базе данных: MySQL получит для него мутатор в версии 8, ST_SRID, PostGIS имеет ST_SetSRID
  2. Вам необходимо конвертировать SRID 31287 в SRID 4326. Это возможно ТОЛЬКО в PostGIS. Ни MySQL, ни Microsoft SQL не могут перепроектировать SRID.

Чтобы решить первую проблему в PostGIS, вы должны использовать ST_SetSRID и для решения второй проблемы вы бы использовали ST_Transform,

Обновление преобразования в 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) |
+---------------------------------------------+

В MySQL это выглядит так:

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

Надеюсь это поможет

Это сработало для меня

(Для MySQL)

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

Я могу только надеяться, что это поможет вам (напрямую или в качестве указателя) в качестве ответа для SQL Server, но как насчет...

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

Естественно, вы можете поменять Geometry на Geography, если вы используете столбцы Geography. Вам нужно будет заменить Table вашим именем таблицы, а SpatialColumn - именем вашего Spatial Column.

ПРИМЕЧАНИЕ. Предполагается, что ваш SRID 31287 определяет координаты как значения десятичной широты / долготы.

Другие вопросы по тегам