Преобразовать поля широты / долготы в геопространственные точки

У меня есть таблица с широтой, долготой и координатами столбца. Есть более 500 000 строк. Поле координат в настоящее время пусто в каждой строке. Что мне нужно сделать, так это преобразовать широту и долготу в геопространственную точку () и поместить ее в столбец координат. Это возможно?

я знаю это POINTs можно вставить так:

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)...

Другие вопросы по тегам