Перемещение текстовых столбцов lat / lon в столбец типа 'point' - PullRequest
20 голосов
/ 22 апреля 2011

В моей базе данных MySQL есть таблица с именем house.

. В таблице house есть пара текстовых столбцов с именами latitude и longitude.

.

Я добавил новый столбец с именем coords типа point - http://dev.mysql.com/doc/refman/5.0/en/gis-class-point.html

Как мне переместить значения latitude и longitude в новый столбец coords

Ответы [ 4 ]

35 голосов
/ 22 апреля 2011

Предполагая, что вы хотите индекс 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, ')'))
11 голосов
/ 06 октября 2013

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;

Я собираю данные социальных сетей с геотегами и использую этот метод для добавления геометрии в свои таблицы.

8 голосов
/ 22 апреля 2011

Лаконично:

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;
0 голосов
/ 08 июля 2019

НАКОНЕЦ!Я смог исправить эти ошибки:

#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;
...