Предположим, что у меня есть таблица на 2 столбца как это:
| user_id | int(11) | NO | UNI | NULL | |
| utm | point | NO | MUL | NULL | |
Как Вы видите, это очень просто. utm является типом данных Точки. Я вставляю его как это:
INSERT INTO mytable(user_id, utm) VALUES(1, PointFromWKB(point(50, 50)));
Затем я создаю Пространственный индекс.
ALTER TABLE mytable ...add spatial index on(utm) or something. (forgot)
Хорошо, все хорошо. Теперь, я хочу выбрать * где расстояние <99999. Но это не работает!
//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)
Между прочим, я попробовал к INSERT INTO без PointFromWKB..., и он не работал... вот почему, кто-то намекнул что PointFromWKB мне.
Решено. Вот что я сделал:
where GLength(LineStringFromWKB(LineString(asbinary(utm), asbinary(@mypoint)))) < 9999999999999;