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

标签 mysql sql geospatial

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

我知道 POINT 可以这样插入:

INSERT INTO `myTable` (`coordinates`) VALUES (GeomFromText('POINT(50.2 51.6)'));

我基本上需要这样做,但需要从每一行的 latitudelongitude 中提取值。

最佳答案

这是一个较旧的问题,但我已经指出所有答案都是错误的(至少在 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)
);

出现错误:

ERROR 1210 (HY000): Incorrect arguments to st_distance_sphere

因为我在答案中使用了 like 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)

关于mysql - 将纬度/经度字段转换为地理空间点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21188765/

相关文章:

mysql - 为什么我的 table 尺寸比预期大 4 倍以上? (行*字节/行)

sql - 如何将某个点设置为地理列的默认值?

SQL UNION 与 ORDER

mysql - 为了获得可变列,单个表的 `multiple` JOIN 的成本是多少

r - 在 shapefile 中保存 ggplot2 coord_map() 图表

r - 如何解释统一空间数据中的 CSR 和聚类?

mysql - 在 Plotalot 中使用 BETWEEN 子句

mysql - 如何对关系数据库中的子部分进行建模?

PHP 准备语句 - 动态变量元素数量错误

r - 计算光栅的质心