我的MySQL数据库中有一个名为house
的表。
在house
表中,有几个文本列,名为latitude
和longitude
。
我添加了一个名为coords
的新列,类型为point
- http://dev.mysql.com/doc/refman/5.0/en/gis-class-point.html
我如何将latitude
和longitude
值移动到新的coords
列?
假设您想在此列上使用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, ')'))
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;
我收集地理标记的社交媒体数据,我使用此方法向我的表添加几何。
简明:
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;
最后!我能够解决这些错误:
#3037 - Invalid GIS data provided to function st_geometryfromtext.
#1416 - Cannot get geometry object from data you send to the GEOMETRY field
通过自定义SQL查询,我指出了lat和long点。在我的例子中,执行它的SQL字符串是:
UPDATE wp_wpgmza SET latlng = GeometryFromText( CONCAT( 'POINT(', 38.5775167, ' ', -121.4868583, ')' ) ) WHERE id = 63;