Oct
29

wxYahooMaps – Библиотека для работы с Yahoo! Maps Image API

Google Buzz

Странная вещь получается. А ведь нету нормальных библиотек для С++, работающих с online-сервисами карт. Все популярные сервисы предоставляют API для .NET, а С++, как мне кажется, незаслуженно обделяют своим вниманием.
И вот пару дней назад решил восполнить этот пробел. Выбор пал на сервис Yahoo! Maps, а если быть точным, то Yahoo! Map Image API, которое позволяет получить изображение карты, сформировав определенным образом REST (Representational State Transfer) запрос.

Ознакомиться с механизмом работы сервиса можно здесь. Сильно подробно описывать не буду, скажу только что смысл заключается в формировании URL, открыв который мы получим XML-файл с адресом изображения карты.

Необходимым условием для работы с Yahoo! Map Image API является наличие у приложения уникального идентификатора (Application ID), получить который можно здесь (кстати, я уже писал ранее что Maps API для Google Android тоже требует Application ID).

Итак, wxYahooMaps. Что это такое и как это работает: это wxWidgets-based библиотека, которая позволяет по указанным координатам (широта + долгота) или названию местности (улица/город/штат/почтовый код) получить изображение карты, в центре которого будет искомая точка. Библиотека загружает карты асинхронно и поддерживает многопоточную загрузку, что иногда бывает очень удобным.

Для того чтобы начать пользоваться wxYahooMaps достаточно выполнить несколько простых действий:

Создать объект класса wxYahooMap (желательно чтобы это был член класса формы или приложения, т.е. был доступен на протяжении всей работы программы):


wxYahooMap * m_YahooMap;

...

m_YahooMap = new wxYahooMap(this);

К форме, которая должна получать уведомления о состоянии процесса загрузки карт добавить обработчик события EVT_YAHOO_MAP_STATUS:


BEGIN_EVENT_TABLE( wxYahooMapsTestMainFrame, wxFrame )
...
EVT_YAHOO_MAP_STATUS(wxID_ANY, wxYahooMapsTestMainFrame::OnYahooMapStatus)
END_EVENT_TABLE()

void wxYahooMapsTestMainFrame::OnYahooMapStatus(wxYahooMapStatusEvent & event)
{
        if(event.GetInt() == 0)
        {
                wxBitmap * bmp = event.GetBitmap();
                if(bmp)
                {
                        // Здесь работаем с изображением карты
                        // После этого изображение надо удалить
                        wxDELETE(bmp);
                }
        }
        else
        {
                // Обработать ошибку
        }
}

Теперь для того чтобы загрузить изображение карты необходимо указать необходимые параметры поиска и вызвать метод wxYahooMap::StartDownload()

void wxYahooMapsTestMainFrame::OnGOBUTTONClick( wxCommandEvent & event )
{
        TransferDataFromWindow();
        m_YahooMap->SetApplicationID(m_AppID);
        m_YahooMap->SetUsePosition(m_UsePosition);
        m_YahooMap->SetPosition(wxRealPoint(m_Longitude, m_Latitude));
        m_YahooMap->SetStreet(m_Street);
        m_YahooMap->SetCity(m_City);
        m_YahooMap->SetState(m_State);
        m_YahooMap->SetZIPCode(m_ZIPCode);
        m_YahooMap->SetImageType(wxYahooMap::IntToYahooMapImageType(m_ImageType));
        m_YahooMap->SetImageSize(wxSize(m_ImageWidth, m_ImageHeight));
        m_YahooMap->SetZoomLevel(m_ZoomLevel);
        m_YahooMap->StartDownloading();
}

После окончания загрузки карты будет вызван обработчик события wxEVT_YAHOO_MAP_STATUS, в котором можно произвести необходимые действия с изображением карты. После этого обязательно необходимо очистить память, занятую объектом изображения.
В результате у нас должно получиться что-то вроде этого:

На данный момент библиотека wxYahooMaps оттестирована под:

  • Windows Vista
  • Windows XP
  • Windows Mobile 2003 (PPC)
  • Windows Mobile 6.0

Проводится тестирование под Mac OS и Linux.
Исходный код можно загрузить из SVN-репозитория на Google Code. Там же можно загрузить исполняемый файл примера для Windows XP/Vista.

PS: Если кто-либо из читателей блога желает помочь в развитии проекта, можно оставлять свои контакты в комментариях. На данный момент требуется помощь в реализации работы с геокодером Yahoo!.

Еще интересные посты о программировании для мобильных устройств:

1 Comment

Make A Comment
  • Mobile Developer - Программирование для мобильных устройств» Blog Archive Said:

    [...] всякими online-сервисами. Вон было недавно о Google Translate и Yahoo! Maps, а сегодня буду рассказывать о том как работать с [...]

Comments RSS Feed   TrackBack URL

Leave a comment

Please leave these two fields as-is:
Книга Квадрант денежного потока Роберта Кийосаки в магазине Богатого папы. ; купить виагру Москва

top