Mein Ziel ist es, mit mysql POINT (lat, long) in der Nähe befindliche Entitäten in der Datenbank zu finden. Ich versuche etwas wie am Ende dieses Tutorials zu tun http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL. Hier ist, was ich habe:Mysql räumliche Entfernung mit POINT - funktioniert nicht
Tabelle:
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;
Einfügen einige Test-Daten:
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');
der Distanzfunktion Deklarieren:
DELIMITER $$
CREATE FUNCTION `distance`
(a POINT, b POINT)
RETURNS double DETERMINISTIC
BEGIN
RETURN
round(glength(linestringfromwkb(linestring(asbinary(a),
asbinary(b)))));
END $$
DELIMITER;
Der Versuch, die Funktion zu verwenden, zu suchen ex .:
SELECT name, distance(mark.loc, GeomFromText(' POINT(31.5 42.2) ')) AS cdist
FROM mark
ORDER BY
cdist limit 10;
oder:
SELECT DISTINCT
dest.name,
distance(orig.loc, dest.loc) as sdistance
FROM
mark orig,
mark dest
having sdistance < 10
ORDER BY
sdistance limit 10;
Das Problem Ich erhalte ist: ERROR 1367 (22007): Illegal nicht geometrisch 'aswkb (a @ 0)' Wert während der Analyse oder ERROR 1416 (22003) gefunden: Geometrieobjekt kann nicht von Daten empfangen werden, die Sie an das GEOMETRY-Feld senden
Ich kann nicht herausfinden, wie ich das lösen kann. Wichtig ist, dass die Funktion "distance" dynamisch verwendet werden kann.
Ich habe auch diese Lösung versucht: Find the distance between two points in MYSQL. (using the Point Datatype)
Dies ist meine MySQL-Version MySQL Ver 14.14 Distrib 5.5.23 für Linux (x86_64) mit Readline- 5.1
Hoffnung someones Expertise mir helfen kann. Prost!
Try 'round (glength (LineStringFromWKB (Linestring (GeomFromText (ASTEXT (a)) nennen, GeomFromText (astext (b)))))) ' – acraig5075
@ acraig5075 - Danke für den Vorschlag, ich endete mit fast dem gleichen Ergebnis. – OMA