将lat / lon文本列移动到“point”类型列中

时间:2011-04-22 14:03:29

标签: mysql latitude-longitude point

我的MySQL数据库中有一个名为house的表。

house表格中,有几个名为latitudelongitude的文字列。

我添加了一个名为coords的新列,其类型为point - http://dev.mysql.com/doc/refman/5.0/en/gis-class-point.html

如何将latitudelongitude值移至新的coords列?

4 个答案:

答案 0 :(得分:35)

假设您希望此列有SPATIAL索引:

ALTER TABLE mytable ADD coords Point;

UPDATE  mytable
SET     coords = Point(lon, lat);

ALTER TABLE mytable MODIFY coords POINT NOT NULL;

CREATE SPATIAL INDEX sx_mytable_coords ON mytable(coords);

如果不这样做,可以省略最后两个步骤。

<强>更新

在早期版本的MySQL中,您需要使用Point填充WKT列:

UPDATE  mytable
SET     coords = GeomFromText(CONCAT('POINT (', lon, ' ', lat, ')'))

答案 1 :(得分:11)

MySQL版本5.5.8

我的纬度和经度属于float类型。要更新现有行...

UPDATE table_name SET coord = POINT(longitude_field, latitude_field);

要考虑的事项,如果您正在收集数据并需要单独保存纬度和经度,请在各自的列中,我建议为您的表添加触发器

CREATE DEFINER=`username`@`localhost` TRIGGER `table_name`.`create_point_geom` 
BEFORE INSERT ON database_name.table_name FOR EACH ROW
BEGIN
    SET NEW.coord = POINT(NEW.longitude, NEW.latitude);
END;

我收集带地理标记的社交媒体数据,并使用此方法向我的表格添加几何图形。

答案 2 :(得分:8)

简明扼要:

UPDATE myTable SET coords = GeometryFromText( CONCAT( 'POINT(', lon, ' ', lat, ')' ) );

请注意,Quassnoi的回答是错误的,因为正确的输入格式是POINT(X Y),或者是地球POINT(lon lat)。

请注意,您可以通过X()和Y()函数显示点,如下例所示:

SELECT X( GeometryFromText( CONCAT( 'POINT(', 35, ' ', 60, ')' ) ) ) AS x, Y( GeometryFromText( CONCAT( 'POINT(', 35, ' ', 60, ')' ) ) ) AS y;

答案 3 :(得分:0)

最后!我能够解决这些错误:

#3037 - Invalid GIS data provided to function st_geometryfromtext.
#1416 - Cannot get geometry object from data you send to the GEOMETRY field

通过执行自定义SQL查询,我指出了纬度和经度。就我而言,执行此操作的SQL字符串是:

UPDATE wp_wpgmza SET latlng = GeometryFromText( CONCAT( 'POINT(', 38.5775167, ' ', -121.4868583, ')' ) ) WHERE id = 63;