Я работаю с радиокартами, которые кажутся слишком фрагментированными для эффективного запроса. Время ответа составляет 20-40 секунд, когда я спрашиваю, находится ли одна точка внутри мультиполигона (я проверил "в пределах" / "содержит" / "перекрытия"). Я использую PostGIS с GeoDjango для абстрагирования запросов.
Многогранный столбец имеет индекс GiST, и я попробовал VACUUM ANALYZE. Я использую PostgreSQL 8.3.7. и Джанго 1.2.
Карты простираются на большие географические области. Первоначально они были созданы с помощью радиоинструмента с учетом топографии, и поэтому радиоячейки / полигоны фрагментированы .
Моя цель - запросить точки внутри мультиполигонов (то есть домов, которые могут или не могут быть покрыты сигналами).
Все радиокарты состоят из 100 000 - 300 000 вершин (всего) с дико различающимся количеством полигонов. Некоторые из карт имеют менее 10 полигонов. Оттуда он прыгает между 10.000 и 30.000 полигонов. Отношение количества полигонов к вершинам, по-видимому, не влияет на время, затрачиваемое на выполнение запросов.
Я использую проекционную систему координат и использую одну и ту же систему для домов и радиосекторов. Qgis показывает, что радио сектора и карты правильно расположены на местности.
Мои тестовые запросы относятся только к одному дому за раз в пределах одной радиокарты. Я проверил запросы типа «в пределах» / «содержит» / «перекрытия», и результаты такие же:
Ответ за секунду, если дом находится «далеко» от радиокарты (я полагаю, это потому, что он находится за пределами ограничительной рамки, которая автоматически используется в запросе).
20-40 секунд, время отклика, если дом / точка находится близко или внутри радиокарты.
Есть ли у меня альтернативные способы оптимизации запросов, или я должен каким-то образом изменить / упростить исходный материал? Любой совет приветствуется.