Товарищи!
Вот есть у меня объекты. Нужно их отрисовывать разными иконками. Нужно, чтобы проблемные объекты рисовались поверх непроблемных.
В mapcss за это отвечал параметр z-index, но в cartocss его нет.
Вот пример mss-стиля:
#tp-quality-power-low[zoom >= 5]{
marker-allow-overlap: true;
// мало:
marker-file: url('icons/power_tp_quality_red.png');
}
#tp-quality-power-hight[zoom >= 5]{
marker-allow-overlap: true;
// высоко:
marker-file: url('icons/power_tp_quality_yellow.png');
}
#tp-quality-power-good[zoom >= 5]{
marker-allow-overlap: true;
// норм:
marker-file: url('icons/power_tp_quality_green.png');
}
#tp-quality-power-no[zoom >= 5]{
marker-allow-overlap: true;
// нет данных:
marker-file: url('icons/power_tp_quality_magenta.png');
}
Как сделать так, чтобы #tp-quality-power-low всегда рисовались поверх всех остальных? Думал, что будет очерёдность в зависимости от описания: все будут либо красные либо cons/power_tp_quality_magenta.png, но нет - чаще зелёные всех перекрывают. Видать очерёдность работает только в рамках одного правила в {}.
И ещё вопрос п очисловым значениям тега. В mapcss раньше можно было проверять значение числового тега и написать что-то вида:
/* low */
node|z2-[power=sub_station][t1_u_f<=220],
node|z2-[power=sub_station][t2_u_f<=220]
{icon-image:"power_tp_quality_red.png"; z-index:10}
/* hight */
node|z2-[power=sub_station][t1_u_f>=242],
node|z2-[power=sub_station][t2_u_f>=242]
{icon-image:"power_tp_quality_yellow.png"; z-index:14}
/* good */
node|z2-[power=sub_station][t1_u_f<=242][t1_u_f>=220],
node|z2-[power=sub_station][t2_u_f<=242][t2_u_f>=220]
{icon-image:"power_tp_quality_green.png"; z-index:16}
И это работало. В cartocss же теперь не работает. Только сравнение с текстовой строкой вида: [t1_u_f=“220”] срабатывает. Если же писать [t1_u_f>=220] - то не работает. Приходится оформлять в виде sql-запроса:
- id: drsk-tp-quality-power-low
geometry: point
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way,
power,
COALESCE(name, alt_name, ref) AS name,
operator,
t1_u_f,
t2_u_f
FROM planet_osm_point
WHERE power IN ('substation', 'sub_station')
AND (t1_u_f::numeric <= 220 or t2_u_f::numeric <= 220)
) AS drsk_tp_quality_power_low
properties:
minzoom: 5
- id: drsk-tp-quality-power-hight
geometry: point
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way,
power,
COALESCE(name, alt_name, ref) AS name,
operator,
t1_u_f,
t2_u_f
FROM planet_osm_point
WHERE power IN ('substation', 'sub_station')
AND (t1_u_f::numeric >= 242 or t2_u_f::numeric >= 242)
) AS drsk_tp_quality_power_hight
properties:
minzoom: 5
- id: drsk-tp-quality-power-good
geometry: point
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way,
power,
COALESCE(name, alt_name, ref) AS name,
operator,
t1_u_f,
t2_u_f
FROM planet_osm_point
WHERE power IN ('substation', 'sub_station')
AND (
(t1_u_f::numeric <= 242 AND t1_u_f::numeric >= 220)
OR (t2_u_f::numeric <= 242 AND t2_u_f::numeric >= 220)
)
) AS drsk_tp_quality_power_good
properties:
minzoom: 5
Скажем так - негибко.
Может быть я чего-то не понимаю?