Mi objetivo es utilizar mysql POINT (lat, long) para buscar entidades cercanas en la base de datos. Estoy tratando de hacer algo como en la parte inferior de este tutorial http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL. Esto es lo que tengo:Distancia espacial de Mysql utilizando POINT - No funciona
Tabla:
CREATE TABLE mark (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) DEFAULT NULL,
loc POINT NOT NULL,
SPATIAL KEY loc (loc)
) ENGINE=MyISAM;
Inserción alguna prueba de los datos:
INSERT INTO mark (loc,name) VALUES (POINT(59.388433,10.415039), 'Somewhere 1');
INSERT INTO mark (loc,name) VALUES (POINT(63.41972,10.39856), 'Somewhere 2');
La declaración de la función de distancia:
DELIMITER $$
CREATE FUNCTION `distance`
(a POINT, b POINT)
RETURNS double DETERMINISTIC
BEGIN
RETURN
round(glength(linestringfromwkb(linestring(asbinary(a),
asbinary(b)))));
END $$
DELIMITER;
Tratar de utilizar la función buscar ex .:
SELECT name, distance(mark.loc, GeomFromText(' POINT(31.5 42.2) ')) AS cdist
FROM mark
ORDER BY
cdist limit 10;
o:
SELECT DISTINCT
dest.name,
distance(orig.loc, dest.loc) as sdistance
FROM
mark orig,
mark dest
having sdistance < 10
ORDER BY
sdistance limit 10;
El problema que estoy recibiendo es: ERROR 1367 (22007): Ilegal no geométrica 'aswkb (un @ 0)' valor encontrado durante el análisis, o ERROR 1416 (22003): No se puede obtener el objeto de geometría de los datos que envía al campo GEOMETRÍA
Parece que no puedo encontrar la manera de solucionarlo. Lo importante es que la función 'distancia' se puede usar dinámicamente.
también he intentado esta solución: Find the distance between two points in MYSQL. (using the Point Datatype)
Esta es mi versión de MySQL mysql Ver 14,14 Distrib 5.5.23, para Linux (x86_64) usando readline 5,1
esperanza de alguien experiencia me puede ayudar. ¡Aclamaciones!
Try 'redonda (glength (LineStringFromWKB (LineString (GeomFromText (astext (a)), GeomFromText (astext (b)))))) ' – acraig5075
@ acraig5075 - Gracias por la sugerencia, terminé con casi el mismo resultado. – OMA