将纬度/经度字段转换为地理空间点

jsk*_*dd3 6 mysql sql geospatial

我有一个带有纬度、经度和坐标列的表格。有超过 500,000 行。坐标字段当前在每一行上都是空的。我需要做的是将纬度和经度转换为 Geospatial POINT() 并将其放入坐标列中。这可能吗?

我知道POINT可以像这样插入 s:

INSERT INTO `myTable` (`coordinates`) VALUES (GeomFromText('POINT(50.2 51.6)'));
Run Code Online (Sandbox Code Playgroud)

我基本上需要做的正是这一点,但通过从拉动值latitudelongitude每行。

MTK*_*MTK 7

这是一个较旧的问题,但我说过所有答案都是错误的(至少在 2019 年)纬度和经度必须与答案相反

反而:POINT(latitude,longitude)

必须是: POINT(longitude,latitude)

在Mysql 5.6及更高版本中可以使用:

Update myTable
Set coordinates = POINT(longitude, latitude);
Run Code Online (Sandbox Code Playgroud)

如果我们尝试一些类似的:

SELECT ST_Distance_Sphere(
    POINT(13.1500000,99.9666700), 
    POINT(48.861105, 120.335337)
);
Run Code Online (Sandbox Code Playgroud)

出现错误:

错误 1210 (HY000):st_distance_sphere 的参数不正确

因为我在答案中使用了likePOINT(latitude,longitude)

但如果我们尝试POINT(longitude,latitude)

SELECT ST_Distance_Sphere(
    POINT(99.9666700, 13.1500000), 
    POINT(120.335337, 48.861105)
);
Run Code Online (Sandbox Code Playgroud)

结果是:

+--------------------------------------------+
| ST_Distance_Sphere(
        POINT(99.9666700, 13.1500000),
        POINT(120.335337, 48.861105)
    ) |
+--------------------------------------------+
|                                                                                      4389299.754585881 |
+--------------------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)


Ray*_*Ray 6

GeomFromText 需要一个字符串,你必须进行很多连接

INSERT INTO myTable (coordinates)  
   SELECT GeomFromText(CONCAT('POINT(',ot.latitude, ' ', ot.longitude,')'))
    FROM otherTable ot;
Run Code Online (Sandbox Code Playgroud)

如果它是对现有表的更新,latitude并将longitude列更新为新列,coordinates请执行以下操作:

UPDATE  myTable 
 SET coordinates =  GeomFromText(CONCAT('POINT(',latitude, ' ', longitude,')'));
Run Code Online (Sandbox Code Playgroud)