Содержание:
Оригинальная игра не была уж очень увлекательной - там всего 15 предзаготовленных стран, но сама механика просто требует, чтобы идею развили в нечто большее. Поискав по интернету похожие реализации, я нашёл Mercator Puzzle Redux. В ней страны, которых уже 178!, появляются в разных местах, что большой шаг вперёд. Однако, она целиком и полностью сделана на клиентской стороне, что накладывает ряд ограничений на дальнейшее развитие. Так что я решил сделать своё, а не развивать уже существующее.
Сразу оговорюсь, что моя цель не столько сделать продукт, сколько изучить новые языки программирования. На бэкенде я решил использовать erlang, в частности веб-сервер YAWS. Последний весьма интересен: его киллер-фича - множественные подключения. По заверениям разработчиков, на соединение тратится всего 30kb. Это сразу наводит на мысль о websocket, поддержка которых там тоже есть! Их можно использовать для проверки ответа, показа информации о стране и пр., но не будем торопиться. Для базы данных стран я выбрал PostgreSQL, в частности и из-за его великолепной библиотеки для работы с геоданными.
Для начала нужно получить очертания стран. Немного покопавшись в сети, я узнал, что есть специальное расширение для работы с географическими данными - postgis, информации по нему море, но порог вхождения достаточно высок из-за обилия терминов. Есть даже шейпы с очертаниями государств!. Повторюсь, ни с чем подобным я ещё не работал, так что на первый раз решил сделать как проще, а именно через kml-файл. KML - специальный формат на основе XML для задания линий, полигонов и прочей географической ерунды :) Те координаты стран, которые я нашёл, меня вполне устроили. Итак, у меня есть kml-файл с полигонами стран, теперь хорошо бы его загнать в базу данных.
Текущая версия Google Maps API настоятельно рекомендует использовать строковое представление полигонов, закодированное специальным образом. Следовательно, надо перегнать содержимое kml-файла в набор строк-полигонов. Эту задачу наверняка уже кто-то решал, так что снова идём в Google. После некоторых поисков наткнулся на такую замечательную страничку со скриптами конвертации. Perl - бе-бе-бе, Java/PHP - скучно, а вот Ruby - как раз. Осталось только с ним подружиться :) Но об этом уже в следующей статье.
На этом вводная часть заканчивается. Исходный код как всегда на github.
UPD