2011-04-22 10 views

Respuesta

29

que quieren Suponiendo un índice de 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, se puede omitir los dos últimos pasos.

Actualización:

En versiones anteriores de MySQL, se necesitaría para llenar Point columnas usando WKT:

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

El segundo comando no parece mover los valores en coords. Me aparece este error: No se puede obtener el objeto de geometría de los datos que se envían al campo GEOMETRÍA – cannyboy

+0

@cannyboy: ¿qué versión de 'MySQL' estás usando? ¿Pueden 'lat' y' lon' ser 'NULL'? – Quassnoi

+0

MySQL 5.0.45. las columnas de texto de latitud y longitud no son nulas. – cannyboy

8

concisa:

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

Tenga en cuenta que responder de Quassnoi es por error ya que el formato de entrada adecuado es POINT (XY), o en términos de tierra POINT (lon lat).

Nota se puede mostrar puntos a través de la función Y (X)() y como el siguiente ejemplo:

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

¿Está seguro de que es lon-lat ... todo lo demás en la red dice lo contrario –

+0

@Jonathan Es POINT (x, y). Vea esta prueba 'SELECCIONE X (PUNTO (3, 2)) COMO x' Regresará 3. –

8

MySQL versión 5.5.8

Mi latitud y longitud son de tipo float. Para actualizar las filas existentes ...

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

Algo a tener en cuenta, si usted está recogiendo datos y la necesidad de salvar la latitud y longitud por separado, en sus respectivas columnas, yo sugiero agregar un disparador para su mesa

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 utilizo este método para agregar geometría a mis tablas.

Cuestiones relacionadas