|
|
Изображения | All Albums | Справка | Пользователи | Календарь | Сообщения за день | Поиск |
База Знаний Тематика: технические вопросы, нанотехнологии, инновации Температура кипения: низкая Запас прочности: практический опыт Степень защиты: жесткая модерация |
|
Опции темы | Поиск в этой теме | Опции просмотра |
05.02.2011, 11:43 | #1 |
Генералиссимус
Site Admin
енот-старожил |
Использование google maps API в GUI приложениях windows
Совсем недавно столкнулся с необходимостью использовать карты google в приложениях windows. Долго рыл мануалы, ибо задачка была не тривиальной. На сайте google.com много материала по данной тематике. Однако, в основном google maps API используется для добавления требуемого функционала на свой сайт. Здесь потребовалось добавить функционал в GUI приложение windows. Причем разработка ведется в среде RAD Studio 2009.
Я не буду останавливаться на инициализации карт google и особенностях библиотеки javascript от google. Я хочу коснуться только особенностях использования javascript в RAD Studio с помощью компоненты WebBrowser. ... link href="http://code.google.com/apis/maps/documentation/javascript/examples/standard.css" rel="stylesheet" type="text/css"> /link script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"> script ... div id="map_canvas" style="position:absolute; width:100%; height:100%; left:0px; top:0px;" /div Инициализация карты: //lon - долгота //lat - широта //obsrv - ссылка на Dispatch интерфейс, который передается в момент инициализации со стороны программы function MapInit(lon, lat, obsrv) { var canvas = document.getElementById("map_canvas"); var myOptions = { zoom: 8, center: new google.maps.LatLng(lat, lon), mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(canvas, myOptions); google.maps.event.addListener(map, 'mousemove', map_mousemove); google.maps.event.addListener(map, 'click', map_click); observer = obsrv; return 0; } Пусть, к примеру, требуется добавить объект "Точка" на карту. Это можно сделать следующим образом: //id - идентификатор объекта (используется для управления объектом из вне) //lon - долгота //lat - широта //text - текст, который отображается при наведении на маркер мышкой function createMarker(id,lon,lat,text) { if (!map) return; var myLatlng = new google.maps.LatLng(lat,lon); var marker = new google.maps.Marker({ clickable:true, draggable:true, position: myLatlng, map: map, title:text }); marker.type = "poly"; marker.markerdrag = markerdrag; marker.id = id; marker.markerclick = markerclick; google.maps.event.addListener(marker,'drag',marker drag); google.maps.event.addListener(marker,'click',marke rclick); map.setCenter(myLatlng); listmark.push(marker); } В RAD Studio, соответственно, необходимо определить dispatch интерфейс, который мы передаем скрипту что бы иметь возможность обратного вызова для обработки событий google maps. Для вызова функций javascript можно использовать такую конструкцию: CComPtr<IHTMLDocument2> doc; CComPtr<IHTMLWindow2> win; Variant ctrl; HRESULT hr = WebBrowser2->Document->QueryInterface(&doc); if (SUCCEEDED(hr)) hr = doc->get_parentWindow(&win); else return; ctrl = (IDispatch*)win; //Добавляем маркер на карту ctrl.OleProcedure("createMark",id,lon,lat,Name); Вот собственно и все |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|