Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет schegloff ([info]schegloff)
@ 2009-07-12 13:05:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Доволен как слон, или Не можешь решить сложную задачу - решай простые
Предмет моего ничем не оправданного самодовольства:



Кривая некрасивая карта мира, отрисованная по добытому из надежных источников KML-файлу. Все для того же Пульта, разумеется. Казалось бы, и чему тут радоваться?


В гуглевском стандартном языке разметки карт (KML) координаты раскрашиваемых областей (в нашем случае - стран) задаются через долготу и широту: (-180...180) (90..-90). При отрисовке таких координат на плоскости (и даже на глобусе, в Google Earth) возникает следующая проблема: координаты, пересекающие границу карты (например 170...-170, как у Чукотки) начинают отрисовываться "от меньшей к большей", и Чукотка становится большим кольцом, охватывающим Северный полюс:



Разумеется, наша первоначальная программа отрисовки оказалась не лучше Google Earth:



- вот что получилось при попытке отцентрировать карту не по Англии, а по США. Как только какая-то страна пересекает правую границу карты - она мигом превращается в кольцо вокруг Земли.

Для правильной отрисовки таких стран в Google Earth (через KML) приходится хитрить со стилями (делая заливку прозрачной и отображая только границы), или вручную делить Чукотку на 2 части, 170..179.9999 и -179.9999...-170. Поскольку ручную работу в 21 веке я считаю почти преступлением, пришлось немного подумать и добавить к KML-Renderer метод, автоматически разрезающий попавшие на границу области на правую и левую половинки. Несколько дней возни - и вот наконец он заработал; теперь в рамках Пульта можно без проблем вращать карту мира вокруг вертикальной оси.


Так вот, решение даже такой простой задачи вызвало ощутимый прилив сил и желания жить дальше. Отсюда мораль: когда все плохо - найти задачу попроще, решить ее, и убедиться, что плохо далеко не все.