MySQL Geom Offset тестирование - PullRequest
       12

MySQL Geom Offset тестирование

0 голосов
/ 10 марта 2011

Я хочу написать функцию смещения для проверки того, что движущийся объект касается других подвижных и неподвижных объектов в пространстве.
Чтобы проверить это, мне нужно посмотреть, пересекаются ли их ограничивающие стороны.

Я бы хотел проверить, касаются ли два подвижных объекта так: Стол автомобильный
- id: целое число (первичный autoinc)
- прямоугольник: Линия
- ...

Расположение таблицы
- id: целое число (первичное значение autoinc)
- car_id: целое число
- car_date: date
- car_pos: точка
- ...

FUNCTION MyDB.OffsetRect(pLineString GEOMETRY, pOffset POINT) RETURNS geometry BEGIN<br> declare Result LineString;<br> declare P1 Point;<br> declare P2 point;<br> declare P3 point;<br> declare P4 point;<br> set Result = ENVELOPE(pLineString); /<em>Make sure we are dealing with a rect</em>/<br> set P1 = POINTN(Result,1);<br> set p1 = Point(X(p1)+X(pOffset),Y(p1)+Y(pOffset));<br> set P2 = POINTN(Result,2);<br> set p2 = Point(X(p2)+X(pOffset),Y(p2)+Y(pOffset));<br> set P3 = POINTN(Result,3);<br> set p3 = Point(X(p3)+X(pOffset),Y(p3)+Y(pOffset));<br> set P4 = POINTN(Result,4);<br> set p4 = Point(X(p4)+X(pOffset),Y(p4)+Y(pOffset));<br> set Result = LineString(p1,p2,p3,p4);<br> RETURN Result;<br> END

Но я застрял в том, какой запрос использовать, чтобы увидеть, пересекаются ли две машины во времени. что-то вроде.

SELECT location.id, location2.id FROM location
INNER JOIN car ON (car.id = location.car_id)
INNER JOIN location location2 ON (location.id <> location2.id)
INNER JOIN car car2 ON (car2.id = location2.car_id AND car.id <> car2.id)
WHERE location.car_date BETWEEN date_sub(now(),INTERVAL 1 DAY) AND date_add(now(),INTERVAL 1 DAY)
AND location2.car_date BETWEEN date_sub(now(),INTERVAL 1 DAY) and date_add(now(),INTERVAL 1 DAY)
AND      MBRIntersects(OffsetRect(car.rect,location.car_pos),OffsetRect(car2.rect,location2.car_pos));

Однако это не работает, что не так?

1 Ответ

1 голос
/ 10 марта 2011

Пересечь .. Вы имеете в виду, что оба припаркованы в одном и том же месте в течение 48 часов друг от друга (ваш диапазон времени составляет 48 часов).

ГДЕ местоположение .car_date МЕЖДУ date_sub (now (), INTERVAL 1 DAY) И date_add (now (), INTERVAL 1 DAY)
AND location .car_date МЕЖДУ date_sub (now (), INTERVAL 1 DAY) и date_add (now (), INTERVAL 1 DAY)

Вы использовали один и тот же псевдоним дважды подряд

...