Паззл из стран Mercator. Введение

Jun 24, 2013 20:12 · 461 words · 3 minute read mercator

Содержание:

игрушка от Google На Хабре был как-то обзор небольшой игрушки от Google для демонстрации работы с API карт. Суть в том, что надо все страны растащить по своим местам. Когда-то в детстве у меня была подобная игрушка (ещё под DOS), но она больше напоминала тетрис - надо было успеть положить страну на своё место пока она не скрылась за границами экрана. Кстати, если кто вспомнит название, буду очень благодарен? она мне безумно нравилась, и благодаря ей я усвоил почти всю политическую карту мира :) Ну так вот, а почему бы не сделать что-нибудь похожее на современных технологиях?

Оригинальная игра не была уж очень увлекательной - там всего 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

GeoPuzzle Проект переписан на другие технологии, улучшен и запущен на сайте https://geopuzzle.org.