Перемещение столбцов текста lat/lon в столбец типа "точка"
У меня есть таблица в моей базе данных MySQL под названием house
.
В таблице house
есть несколько текстовых столбцов, называемых latitude
и longitude
.
Я добавил новый столбец под названием coords
, типа point
- http://dev.mysql.com/doc/refman/5.0/en/gis-class-point.html
Как перенести значения latitude
и longitude
в новый столбец coords
?
Ответы
Ответ 1
Предполагая, что вы хотите SPATIAL
индекс для этого столбца:
ALTER TABLE mytable ADD coords Point;
UPDATE mytable
SET coords = Point(lon, lat);
ALTER TABLE mytable MODIFY coords POINT NOT NULL;
CREATE SPATIAL INDEX sx_mytable_coords ON mytable(coords);
Если вы этого не сделаете, вы можете пропустить последние два шага.
Обновить:
В более ранних версиях MySQL
вам нужно было заполнять столбцы Point
с помощью WKT
:
UPDATE mytable
SET coords = GeomFromText(CONCAT('POINT (', lon, ' ', lat, ')'))
Ответ 2
Версия MySQL 5.5.8
Моя широта и долгота имеют тип float. Чтобы обновить существующие строки...
UPDATE table_name SET coord = POINT(longitude_field, latitude_field);
Что-то, что нужно учитывать, если вы собираете данные и должны сохранять широту и долготу отдельно, в своих соответствующих столбцах я предлагаю добавить триггер в вашу таблицу
CREATE DEFINER=`username`@`localhost` TRIGGER `table_name`.`create_point_geom`
BEFORE INSERT ON database_name.table_name FOR EACH ROW
BEGIN
SET NEW.coord = POINT(NEW.longitude, NEW.latitude);
END;
Я собираю данные геоинформации в социальных сетях, и я использую этот метод для добавления геометрии в мои таблицы.
Ответ 3
Лаконично:
UPDATE myTable SET coords = GeometryFromText( CONCAT( 'POINT(', lon, ' ', lat, ')' ) );
Обратите внимание, что ответ от Quassnoi ошибочен, так как правильный формат ввода - POINT (X Y) или в терминах POINT точки (lon lat).
Обратите внимание, что вы можете показывать точки через функции X() и Y(), как показано в следующем примере:
SELECT X( GeometryFromText( CONCAT( 'POINT(', 35, ' ', 60, ')' ) ) ) AS x, Y( GeometryFromText( CONCAT( 'POINT(', 35, ' ', 60, ')' ) ) ) AS y;
Ответ 4
В КОНЦЕ КОНЦОВ! Мне удалось исправить эти ошибки:
#3037 - Invalid GIS data provided to function st_geometryfromtext.
#1416 - Cannot get geometry object from data you send to the GEOMETRY field
Делая пользовательский запрос SQL, где я указал широту и долготу. В моем случае строка SQL, которая сделала это, была:
UPDATE wp_wpgmza SET latlng = GeometryFromText( CONCAT( 'POINT(', 38.5775167, ' ', -121.4868583, ')' ) ) WHERE id = 63;