mysql - Mover columnas de texto lat/lon a una columna de tipo ''punto''
latitude-longitude point (3)
Tengo una tabla en mi base de datos MySQL llamada house
.
Dentro de la tabla de la house
, hay un par de columnas de texto llamadas latitude
y longitude
.
He agregado una nueva columna llamada coords
, de tipo point
- http://dev.mysql.com/doc/refman/5.0/en/gis-class-point.html
¿Cómo movería los valores de latitude
y longitude
a la nueva columna de coords
?
Concisamente
UPDATE myTable SET coords = GeometryFromText( CONCAT( ''POINT('', lon, '' '', lat, '')'' ) );
Tenga en cuenta que la respuesta de Quassnoi es errónea, ya que el formato de entrada correcto es PUNTO (XY), o en términos de tierra PUNTO (latón largo).
Tenga en cuenta que puede mostrar puntos a través de las funciones X () e Y () como en el siguiente ejemplo:
SELECT X( GeometryFromText( CONCAT( ''POINT('', 35, '' '', 60, '')'' ) ) ) AS x, Y( GeometryFromText( CONCAT( ''POINT('', 35, '' '', 60, '')'' ) ) ) AS y;
MySQL versión 5.5.8
Mi latitud y longitud son de tipo flotador. Para actualizar las filas existentes ...
UPDATE table_name SET coord = POINT(longitude_field, latitude_field);
Algo a considerar, si está recopilando datos y necesita guardar la latitud y la longitud por separado, en sus respectivas columnas, le sugiero que agregue un disparador a su tabla
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;
Recopilo datos de redes sociales etiquetados geográficamente y uso este método para agregar geometría a mis tablas.
Suponiendo que desea un índice SPATIAL
en esta columna:
ALTER TABLE mytable ADD coords Point;
UPDATE mytable
SET coords = Point(lon, lat);
ALTER TABLE mytable MODIFY coords NOT NULL;
CREATE SPATIAL INDEX sx_mytable_coords ON mytable(coords);
Si no lo hace, puede omitir los dos últimos pasos.
Actualizar:
En versiones anteriores de MySQL
, necesitaría llenar columnas de Point
usando WKT
:
UPDATE mytable
SET coords = GeomFromText(CONCAT(''POINT ('', lon, '' '', lat, '')''))