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

时间:2014-01-17 14:52:00

标签: mysql sql geospatial

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

我知道可以像这样插入POINT

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

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

3 个答案:

答案 0 :(得分:4)

GeomFromText需要一个字符串,你需要很多连接

INSERT INTO myTable (coordinates)  
   SELECT GeomFromText(CONCAT('POINT(',ot.latitude, ' ', ot.longitude,')'))
    FROM otherTable ot;

如果对包含latitudelongitude列的现有表格更新到新列coordinates,请执行以下操作:

UPDATE  myTable 
 SET coordinates =  GeomFromText(CONCAT('POINT(',latitude, ' ', longitude,')'));

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这样的事情会起作用吗?

Update myTable
Set coordinates = GeomFromText('POINT(' + latitude + ' ' + longitude + ')')

这假设您的坐标列与lat和long存在于同一个表中。

(请记住这是SqlServer / Tsql语法)...