Используйте скрипт-обертку, который считывает изображение из WMS и перекрашивает его:
Wrapper
Вот пример, написанный на PHP:
<?php
$url = $_GET['url'];
$im = imagecreatefrompng($url);
if($im && imagefilter($im, IMG_FILTER_COLORIZE, 255, 0, 0, 0)){
// this line is only needed if original image has transparency (32bit/pixel)
// and you want to preserve that transparency
imagesavealpha($im, true);
header('Content-type: image/png');
imagepng($im);
}else{
echo 'Conversion failed.';
}
imagedestroy($im);
exit;
?>
Тогда вместодля вызова вашей ссылки WMS вы вызываете упаковщик и передаете ссылку WMS в качестве параметра (recolor_png.php? url = ...).Оболочка считывает исходное изображение и возвращает новый PNG с раскрашенной версией.Не забывайте, что ссылка, которую вы передаете в качестве параметра, должна быть правильно закодирована (все специальные символы заменены их шестнадцатеричной нотацией% XX).В JavaScript вы можете сделать это, используя метод encodeURIComponent ().
Вот рабочий пример использования вашей ссылки и вышеуказанной оболочки на моем сервере:
http://www.digilog.de/pub/stackoverflow/recolor_png2.php?url=http%3A%2F%2Fgeoportal2.uhul.cz%2Fwms_oprl%2F%3FSERVICE%3DWMS%26REQUEST%3DGetMap%26SERVICE%3DWMS%26VERSION%3D1.1.1%26LAYERS%3DHMLCR%26FORMAT%3Dimage%2Fpng%3B%2520mode%3D24bit%26FGCOLOR%3D0xFF0000%26TRANSPARENT%3DTRUE%26SRS%3DEPSG%3A4326%26BBOX%3D16.58935546875%2C49.37522008143603%2C16.600341796875%2C49.38237278700955%26WIDTH%3D256%26HEIGHT%3D256%26STYLES%3D
Это полученное изображение (полупрозрачная версия):
recolor_png2.png http://www.digilog.de/pub/stackoverflow/recolor_png2.png
Та же самая оболочка без полупрозрачного вывода (imagesavealpha удалено из кода):
http://www.digilog.de/pub/stackoverflow/recolor_png.php?url=http%3A%2F%2Fgeoportal2.uhul.cz%2Fwms_oprl%2F%3FSERVICE%3DWMS%26REQUEST%3DGetMap%26SERVICE%3DWMS%26VERSION%3D1.1.1%26LAYERS%3DHMLCR%26FORMAT%3Dimage%2Fpng%3B%2520mode%3D24bit%26FGCOLOR%3D0xFF0000%26TRANSPARENT%3DTRUE%26SRS%3DEPSG%3A4326%26BBOX%3D16.58935546875%2C49.37522008143603%2C16.600341796875%2C49.38237278700955%26WIDTH%3D256%26HEIGHT%3D256%26STYLES%3D
и полученное непрозрачное изображение:
recolor_png.png http://www.digilog.de/pub/stackoverflow/recolor_png.png
Я оставлю эти обертки в сети на несколько дней, чтобы вы могли их протестировать.
Кэширование
Поскольку это преобразование требует интенсивной работы процессора, возможно, было бы целесообразно добавить некоторый кеширующий код в оболочку:
- создать хеш-код из заданного URLНапример: $ hash = md5 ($ url)
- проверить, существует ли изображение с именем $ hash.png в подпапке хранилища
- , если это так: прочитать изображение из файла и вернуть его
- в противном случае: создайте изображение, сохраните его как $ hash.png в подпапке, а также верните it немедленно
Если вы ожидаете, что ваш контент WMS изменится со временем: также проверьте дату создания кэшированных изображений и очистите их, если они слишком старые (например, месяц или около того).Таким образом, любые изменения в картах WMS будут распространяться на вашу систему через максимум один месяц.