Mục tiêu của tôi là sử dụng mysql POINT (lat, long) để tìm các thực thể lân cận trong cơ sở dữ liệu. Tôi đang cố gắng làm một cái gì đó như ở dưới cùng của hướng dẫn này http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL. Dưới đây là những gì tôi đã có:Khoảng cách không gian Mysql bằng cách sử dụng LƯU Ý - Không hoạt động
Bảng:
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;
Chèn một số kiểm tra dữ liệu:
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');
Tuyên bố chức năng khoảng cách:
DELIMITER $$
CREATE FUNCTION `distance`
(a POINT, b POINT)
RETURNS double DETERMINISTIC
BEGIN
RETURN
round(glength(linestringfromwkb(linestring(asbinary(a),
asbinary(b)))));
END $$
DELIMITER;
Đang cố gắng để sử dụng chức năng để tìm kiếm ví dụ:
SELECT name, distance(mark.loc, GeomFromText(' POINT(31.5 42.2) ')) AS cdist
FROM mark
ORDER BY
cdist limit 10;
hay:
SELECT DISTINCT
dest.name,
distance(orig.loc, dest.loc) as sdistance
FROM
mark orig,
mark dest
having sdistance < 10
ORDER BY
sdistance limit 10;
Vấn đề tôi đang nhận được là: ERROR 1367 (22.007): bất hợp pháp phi hình học 'aswkb (một @ 0) giá trị được tìm thấy trong phân tích cú pháp, hoặc ERROR 1416 (22003): Không thể lấy đối tượng hình học từ dữ liệu bạn gửi đến trường GEOMETRY
Tôi không thể tìm ra cách giải quyết vấn đề này. Điều quan trọng là chức năng 'khoảng cách' có thể được sử dụng động.
Tôi cũng đã thử giải pháp này: Find the distance between two points in MYSQL. (using the Point Datatype)
này được phiên bản mysql mysql tôi Ver 14,14 distrib 5.5.23, dành cho Linux (x86_64) sử dụng readline 5.1
Hope ai đó chuyên môn có thể giúp tôi. Chúc mừng!
Hãy thử 'tròn (glength (LineStringFromWKB (LineString (GeomFromText (astext (a)), GeomFromText (astext (b)))))) ' – acraig5075
@ acraig5075 - Cảm ơn bạn đã gợi ý, tôi đã kết thúc với kết quả tương tự. – OMA