В моей таблице есть три геопространственных поля:
`lat` decimal(12,7) NOT NULL,
`lon` decimal(12,7) NOT NULL,
`location` point NOT NULL,
И три геопространственных индекса:
KEY `lat` (`lat`),
KEY `lon` (`lon`),
SPATIAL KEY `location` (`location`)
Затем у меня есть триггер, определенный как «до обновления», который устанавливаетlocation
из пары широта / долгота, как это:
FOR EACH ROW SET NEW.location = PointFromText(CONCAT('POINT(',NEW.lat,' ',NEW.lon,')'))
Я почти уверен, что данные верны, потому что я могу делать все виды запросов круга.Теперь мне также нужно выполнить несколько многоугольных запросов и просто не могу заставить их вернуть какие-либо результаты!Вот мой запрос многоугольника:
SET @bbox = 'POLYGON((32.70 -117.16, 47.97 -122.19, 44.80 -68.77, 25.77 -80.19, 32.70 -117.16))';
SELECT * , AsText( location )
FROM geo_table
WHERE Intersects( location, GeomFromText( @bbox ) );
Запустив этот запрос через phpMyAdmin, я получаю следующее сообщение для обоих операторов SQL:
# MySQL returned an empty result set (i.e. zero rows).
Как FYI, точки данных показаны в указанном выше наборе@bbox из 4 углов США (введено по часовой стрелке) и должно возвращать 99% всех точек, но ничего не возвращает.Вот координаты: Сан-Диего, Калифорния: +32,70 -117,16 Сиэтл, Вашингтон: 47,97 -122,19 Бангор, Мэн: 44,80 -68,77 Майами, Флорида: 25,77 -80,19
Я также пробовал против более 3500 полигоновс канала NWS CAP 1.1 и я ничего не получаю!Я полагаю, что я, должно быть, делаю что-то не так, но, судя по жизни, я не могу понять, что это такое!
Есть предложения?