Подтвердить что ты не робот

Перемещение столбцов текста 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?

4b9b3361

Ответ 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;