Если ваши фигуры многочисленны и сложны, вам лучше всего использовать пространственную базу данных.PostGIS является бесплатным и работает на большинстве платформ, которые MySQL будет.Пространственные базы данных имеют пространственные типы данных для хранения полигонов, пространственные запросы, которые включают запросы к базе данных о том, находится ли точка в многоугольнике, и пространственные индексы, которые делают все достаточно эффективным.
OTOH, если вы имеете дело только сДовольно небольшое количество довольно простых полигонов, которыми вы можете управлять с помощью обычной базы данных.Я сделал это один раз.Мой подход:
Есть таблица многоугольников.Каждая запись многоугольника содержит первичный ключ, любую информацию, которую нужно хранить с каждым многоугольником, и ограничивающий прямоугольник для многоугольника - значения max и min x и y.
Точки для многоугольника хранятся в таблице точек., то есть дитя многоугольника.Каждая запись точки содержит первичный ключ многоугольника, членом которого она является, порядковый номер и значение x и ay.
Чтобы найти многоугольники, которые могут содержать точку, вы запрашиваете таблицу многоугольников, ищаполигоны, которые могут содержать точку - те, для которых эта точка находится в своих ограничивающих прямоугольниках.Эти многоугольники-кандидаты считываются в память, и каждый проверяется, содержит ли он точку.
Существует несколько алгоритмов.http://en.wikipedia.org/wiki/Point_in_polygon
Я использовал метод литья лучей, потому что он прост.Нарисуйте линию от точки до бесконечности в любом направлении и сосчитайте количество отрезков, которые вы пересекаете.Если вы пересекаете нечетное число, ваша точка была внутри многоугольника.