Giả sử tôi có một bảng 2 cột như thế này:Tìm khoảng cách giữa hai điểm trong MYSQL. (Sử dụng Point Datatype)
| user_id | int(11) | NO | UNI | NULL | |
| utm | point | NO | MUL | NULL | |
Như bạn có thể thấy, nó rất đơn giản. utm là Điểm loại dữ liệu. Tôi chèn nó như sau:
INSERT INTO mytable(user_id, utm) VALUES(1, PointFromWKB(point(50, 50)));
Sau đó, tôi tạo chỉ mục Không gian.
ALTER TABLE mytable ...add spatial index on(utm) or something. (forgot)
Được rồi, mọi thứ đều tốt. Bây giờ, tôi muốn chọn * trong đó khoảng cách < 99999. Nhưng nó không hoạt động!
//This is supposed to select all where the distance is less than 99999999.
set @mypoint = PointFromWKB(point(20,20))
select * from mytable where GLength(LineString(utm, @mypoint)) < 9999999;
Empty set (0.00 sec)
select * from mytable where GLength(LineStringFromWKB(LineString(utm, @mypoint))) < 9999;
Empty set (0.00 sec)
Bằng cách này, tôi đã cố gắng để chèn vào mà không có sự PointFromWKB ... và nó đã không làm việc ... đó là lý do tại sao một ai đó gợi ý rằng PointFromWKB với tôi.
Điều này có tính toán khoảng cách theo tọa độ địa lý hoặc tọa độ phẳng hay không. –