mod_tile, правила для точек внутри определенных полигонов

Суть вопроса: как бы так написать запрос, чтобы определенные точки обрабатывались разными правилами, в зависимости от того, находятся ли они внутри полигонов определенного типа?
Конкретно: мне нужно чтобы заправки внутри city отображались бы только на 17-18 зуме, а вне city - на 14-18. Там есть еще похожие потребности, но эта самая показательная.
Я так понимаю, что нужно правильно составить запрос к PostgreSQL, используя встроенные функции. Но попробовав по-всякому, ни к чему не пришел.

Хотелось бы пинок в нужную сторону, какой-нибудь пример, ну или объяснение, что я слишком дофига хочу :slight_smile:

На SQL - раз плюнуть, хочу структуру базы и желательно с индексами, дабы оптимизировать запрос под них.
Ну и параметры выборки + её возвращаемый формат :slight_smile:

Так база создавалась с помощью osm2pgsql, стандартная, под mapnik.
Вы можете просто суть объяснить.
Я попробовал следующее: выбрал точки и полигоны city, и проверил вхождение одних в других. Но все дело в том, что рендер сам добавляет условие выборки вхождения в тайл. В общем суть оказалась верна, но всего один запрос чуть не положил сервак, потому что выборка пошла по всем полигонам в базе :frowning:

В общем суть слудующая: выбрать точки и полигоны, входящие в тайл (это можно), а потом выбрать точки, входящие или не входящие в эти полигоны (вот тут не соображу никак). И все это одним запросом.

Не надо зацыкливаться на

Ведь с выборкой можно работать почти как с таблицей. Можно обернуть вашу выборку потенциальных объектов по ббокс в сабселект после чего уже из него выбрать объекты по второму критерию, т.е. попадание ПОЙ в плейс.
Если постгре - 9.х то первую выборку можно обернуть в конструкцию виз, тогда к этой выборке в запросе можно будет обратиться несколько раз.
Есть и варианты действительно “одного селекта”, только в этом случае будет сложнее прогнозировать поведение планировщика.

Это понятно. Про подзапросы я знаю. Их я попоробовал. НО! Откуда взять условие для подзапроса? mapnik сам подставляет условие, но только для конечной таблицы, а подзапрос выходит для всей базы.

Можно пример запроса от мапринка к конечной таблице и информацию, какую часть запроса можно “портить”, что бы мапник съел?

Я, наверное, неправильно вопрос задал. Вопрос как-раз в том, как правильно сформировать правило для mapnik, чтобы он его понял. С самим sql вопросов нет, я могу выбрать нужную инфу из него запросто. Я только не могу правильно теперь оформить правило для mapnik в XML.

Тут я пас…

Мало ли кому пригодится.
https://github.com/mapnik/mapnik/wiki/PostGIS

Вкратце, границы тайла можно получить и использовать в подзапросах с помощью выражения !bbox!