Преобразовать поля широты / долготы в геопространственные точки
У меня есть таблица с широтой, долготой и координатами столбца. Есть более 500 000 строк. Поле координат в настоящее время пусто в каждой строке. Что мне нужно сделать, так это преобразовать широту и долготу в геопространственную точку () и поместить ее в столбец координат. Это возможно?
я знаю это POINT
s можно вставить так:
INSERT INTO `myTable` (`coordinates`) VALUES (GeomFromText('POINT(50.2 51.6)'));
Мне по сути нужно сделать именно это, но потянув значение из latitude
а также longitude
из каждого ряда.
2 ответа
GeomFromText нужна строка, вам нужно много конкатенации
INSERT INTO myTable (coordinates)
SELECT GeomFromText(CONCAT('POINT(',ot.latitude, ' ', ot.longitude,')'))
FROM otherTable ot;
Если это обновление существующей таблицы с latitude
а также longitude
столбцы в новый столбец coordinates
сделай это:
UPDATE myTable
SET coordinates = GeomFromText(CONCAT('POINT(',latitude, ' ', longitude,')'));
Это более старый вопрос, но я заметил, что все ответы неверны (по крайней мере, в 2019 году) широта и долгота должны быть противоположны ответам
вместо: POINT(latitude,longitude)
Должно быть: POINT(longitude,latitude)
В Mysql 5.6 и выше можно использовать:
Update myTable
Set coordinates = POINT(longitude, latitude);
Если мы попробуем что-то вроде:
SELECT ST_Distance_Sphere(
POINT(13.1500000,99.9666700),
POINT(48.861105, 120.335337)
);
получил ошибку:
ОШИБКА 1210 (HY000): неверные аргументы для st_distance_sphere
Потому что я использовал как в ответах POINT(latitude,longitude)
Но если мы попробуем POINT(longitude,latitude)
:
SELECT ST_Distance_Sphere(
POINT(99.9666700, 13.1500000),
POINT(120.335337, 48.861105)
);
Результат:
+--------------------------------------------+
| ST_Distance_Sphere(
POINT(99.9666700, 13.1500000),
POINT(120.335337, 48.861105)
) |
+--------------------------------------------+
| 4389299.754585881 |
+--------------------------------------------+
1 row in set (0.00 sec)
Будет ли что-то вроде этой работы?
Update myTable
Set coordinates = GeomFromText('POINT(' + latitude + ' ' + longitude + ')')
Это предполагает, что ваш столбец координат существует в той же таблице, что и ваш lat и long.
(Имейте в виду, что это синтаксис SqlServer/Tsql)...