私の目標は、mysql POINT(lat、long)を使用して、データベース内の近くのエンティティを見つけることです。このチュートリアルの下部にあるようなことをしようとしていますhttp://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL。これが私が持っているものです:
テーブル:
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;
テストデータの挿入:
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');
距離関数の宣言:
DELIMITER $$
CREATE FUNCTION `distance`
(a POINT, b POINT)
RETURNS double DETERMINISTIC
BEGIN
RETURN
round(glength(linestringfromwkb(linestring(asbinary(a),
asbinary(b)))));
END $$
DELIMITER;
関数を使用して検索しようとしています。例:
SELECT name, distance(mark.loc, GeomFromText( ' POINT(31.5 42.2) ' )) AS cdist
FROM mark
ORDER BY
cdist limit 10;
また:
SELECT DISTINCT
dest.name,
distance(orig.loc, dest.loc) as sdistance
FROM
mark orig,
mark dest
having sdistance < 10
ORDER BY
sdistance limit 10;
私が得ている問題は次のとおりです:エラー1367(22007):解析中に不正な非ジオメトリ'aswkb(a @ 0)'値が見つかりました、またはエラー1416(22003):GEOMETRYフィールドに送信したデータからジオメトリオブジェクトを取得できません
私はこれを解決する方法を理解できないようです。重要なのは、「距離」関数を動的に使用できることです。
私もこの解決策を試しました:MYSQLの2点間の距離を見つけます。(ポイントデータ型を使用)
これは私のmysqlバージョンですmysqlVer14.14 Distrib 5.5.23、Linux(x86_64)用でreadline5.1を使用しています
誰かの専門知識が私を助けてくれることを願っています。乾杯!