私の目標は、データベース内の近くのエンティティを見つけるためにmysql POINT(lat、long)を使用することです。私はこのチュートリアルの一番下にある何かをしようとしていますhttp://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL。POINTを使用したMysql空間距離 - 動作していません
表:機能を使用しようと
DELIMITER $$
CREATE FUNCTION `distance`
(a POINT, b POINT)
RETURNS double DETERMINISTIC
BEGIN
RETURN
round(glength(linestringfromwkb(linestring(asbinary(a),
asbinary(b)))));
END $$
DELIMITER;
:距離関数を宣言
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');
:
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;
は、いくつかのテスト・データを挿入ここに私が持っているものです検索の例:
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;
私は取得しています問題は、次のとおりです。ERROR 1367(22007):不正な非幾何学的な 'aswkb(@ 0')解析中に検出された値、または ERROR 1416(22003): GEOMETRYフィールドに送信したデータからジオメトリオブジェクトを取得できません
これを解決する方法がわかりません。重要なことは、「距離」機能を動的に使用できることです。 Find the distance between two points in MYSQL. (using the Point Datatype)
これは私のMySQLのバージョンのMySQLは14.14按分5.5.23 Verは、Linuxの(x86_64版)のために誰かの専門知識は、私を助けることができるのreadline 5.1
希望を使用している:
私はまた、このソリューションを試してみました。乾杯!
てみ 'ラウンド(glength(LineStringFromWKB(ラインストリング(GeomFromText(astext(a))は、GeomFromTextで来ます(astext(b))))) ' – acraig5075
@ acraig5075 - おかげで、私はほぼ同じ結果に終わった。 – OMA