Mon but est d'utiliser mysql POINT (lat, long) pour trouver des entités proches dans la base de données. J'essaie de faire quelque chose comme dans le fond de ce tutoriel http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL. Voici ce que j'ai:Distance spatiale Mysql utilisant POINT - Ne fonctionne pas
Tableau:
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;
insérant des données de test:
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');
Déclarant la fonction de distance:
DELIMITER $$
CREATE FUNCTION `distance`
(a POINT, b POINT)
RETURNS double DETERMINISTIC
BEGIN
RETURN
round(glength(linestringfromwkb(linestring(asbinary(a),
asbinary(b)))));
END $$
DELIMITER;
Essayer d'utiliser la fonction pour rechercher ex .:
SELECT name, distance(mark.loc, GeomFromText(' POINT(31.5 42.2) ')) AS cdist
FROM mark
ORDER BY
cdist limit 10;
ou:
SELECT DISTINCT
dest.name,
distance(orig.loc, dest.loc) as sdistance
FROM
mark orig,
mark dest
having sdistance < 10
ORDER BY
sdistance limit 10;
Le problème que je reçois est: erreur 1367 (22007): Illegal non géométrique 'aswkb (un @ 0)' valeur trouvée lors de l'analyse syntaxique ou erreur 1416 (22003): Impossible d'obtenir l'objet géométrique à partir des données que vous envoyez au champ GEOMETRY
Je ne parviens pas à résoudre ce problème. L'important est que la fonction 'distance' puisse être utilisée dynamiquement.
J'ai aussi essayé cette solution: Find the distance between two points in MYSQL. (using the Point Datatype)
Ceci est ma version mysql mysql Ver 14,14 Distrib 5.5.23, pour Linux (x86_64) en utilisant readline 5.1
espoir expertise peut me someones aider. À votre santé!
Essayez 'tour (glength (LineStringFromWKB (LineString (GeomFromText (AsText (a)), GeomFromText (astext (b)))))) ' – acraig5075
@ acraig5075 - Merci pour la suggestion, j'ai fini avec presque le même résultat. – OMA