Il mio obiettivo è utilizzare mysql POINT (lat, long) per trovare le entità vicine nel database. Sto cercando di fare qualcosa di simile in fondo a questo tutorial http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL. Ecco quello che ho ottenuto:Distanza spaziale Mysql utilizzando POINT - Non funziona
Tabella:
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;
Inserimento di alcuni test-dati:
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');
Dichiarare la funzione di distanza:
DELIMITER $$
CREATE FUNCTION `distance`
(a POINT, b POINT)
RETURNS double DETERMINISTIC
BEGIN
RETURN
round(glength(linestringfromwkb(linestring(asbinary(a),
asbinary(b)))));
END $$
DELIMITER;
Cercando di utilizzare la funzione per cercare es .:
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;
Il problema che sto ottenendo è: ERROR 1367 (22007): Illegal non geometrica 'aswkb (un @ 0)' valore trovato durante l'analisi, o ERROR 1416 (22003): Impossibile ottenere oggetto geometria dai dati inviati al campo GEOMETRIA
Non riesco a capire come risolvere questo problema. L'importante è che la funzione "distanza" possa essere utilizzata dinamicamente.
Ho anche provato questa soluzione: Find the distance between two points in MYSQL. (using the Point Datatype)
Questa è la mia versione MySQL MySQL Ver 14.14 Distrib 5.5.23, per Linux (x86_64) usando readline 5.1
speranza di qualcuno esperienza mi può aiutare. Saluti!
Prova 'round (glength (LineStringFromWKB (LineString (GeomFromText (astext (a)), GeomFromText (astext (b)))))) ' – acraig5075
@ acraig5075 - Grazie per il suggerimento, ho finito per ottenere quasi lo stesso risultato. – OMA