MySQL Spatial - преобразование из SRID 31287 в 4326
В MySQL у меня есть база данных с около 100 таблиц.
Все они содержат столбец с именем "форма", это поле типа многоугольника.
Он содержит информацию, в которую я верю (st_srid возвращает 1, но это неверно) - это SRID 31287.
Я хотел бы преобразовать его в SRID 4326, как мне это сделать?
5 ответов
У вас есть две проблемы здесь.
- Ваше внутреннее представление неверно, это SRID 1, и это должен быть SRID 31287. Изменение внутреннего представления возможно в каждой базе данных: MySQL получит для него мутатор в версии 8,
ST_SRID
, PostGIS имеетST_SetSRID
- Вам необходимо конвертировать 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 определяет координаты как значения десятичной широты / долготы.