![]() |
|
||
|
| ГИС инструментарий для Pocket PC (на С# для Windows Mobile) | ||
|
ГИС Panorama Mobile - программа для навигации по векторным, растровым картам и матрицам в форматах ГИС Карта 2011 (Панорама) в ОС Windows Mobile. Программа обеспечивает запись трассы движения, построение кратчайшего маршрута по графу дорог, поиск объектов, просмотр и редактирование семантических характеристик, определение координат произвольных точек, определение длины и азимута линии, нанесение объектов на карту, редактирование характеристик объектов, изменение состава отображаемых данных и другие операции. Программа может быть установлена на КПК с ОС Windows Mobile. Запись трассы может выполняться при отсутствии карт или поверх векторных (MAP, SIT) или растровых карт (RSW) и матриц высот (MTW), подготовленных в ГИС Карта 2011. Трасса движения записывается на пользовательскую карту (SIT), которая затем может быть скопирована на настольный компьютер для дальнейшей обработки. При необходимости трасса может быть конвертирована средствами ГИС Карта 2011 в фор-маты DXF, MIF\MID, SHP, SXF, TXT, DBF, MP, GDF и другие. Исходные карты для КПК могут быть подготовлены в ГИС Карта 2011 путем конвертирования из обменных форматов SXF, DXF, MIF\MID, SHP, S57, MP, TXT, DBF. Все права зарегистрированы. Свидетельство об официальной регистрации программы для ЭВМ N 2005612905 "Инструментарий разработчика ГИС-приложений для Pocket PC (GIS ToolKit для Pocket PC)" и N 2008614932 "Геоинформа-ционная система "Panorama Mobile". Повторная регистрация исходных текстов и дизайна программы не допускается. В состав Инструментария разработчика ГИС-приложений для Pocket PC входит ГИС-ядро в виде динамической библиотеки mapaxlib.dll, библиотека обработки графа дорог mapgraph.dll, h-файлы с описанием прототипов функций MAPAPI на языке С, проект ГИС Panorama Mobile на языке программирования С#, проект инсталляции (CAB) для ГИС Panorama Mobile, вспомогательный проект SaveBMPToCS для подготовки иконок панелей инструментов в ГИС-приложение, документация и справочник по функциям MAPAPI в формате html.
Рис. 1. Общий вид ГИС Panorama Mobile Функции ГИС-ядра обеспечивают управление отображением векторных, растровых и матричных данных о местности, редактирование данных, выполнение расчетов по карте, выполнение оверлейных операций, поиск и выделение объектов по различных критериям, пересчет координат между различными системами, подключение GPS/ГЛОНАСС-приемников и решение других задач. Установка GIS ToolKit Mobile Требования к программному и аппаратному обеспечению Для использования GIS ToolKit Mobile необходимо иметь следующие аппаратные и программные средства:
Порядок установки Для установки GIS ToolKit Mobile необходимо скопировать содержимое папки [ GIS ToolKit Mobile X . X ] или архива gtkmobile . zip в пользовательскую папку.
Рис. 2. Содержимое папок для GIS ToolKit Mobile РАЗРАБОТКА ПРИЛОЖЕНИЯ В GIS ToolKit Mobile Описание демонстрационного проекта Чтобы начать работу с демонстрационным проектом необходимо запустить приложение Microsoft Visual Studio 2008 и открыть проект \ GIS ToolKit Mobile X . X \ PanoramaMobile \PanoramaMobile.csproj.
Рис. 3. Общий вид проекта ГИС Panorama Mobile Процедура запуска приложения описана в файле Program . cs : namespace MobileGIS
{
Класс главной формы приложения MyForm объявлен в MainForm.cs. При старте приложения выполняется обработчик события MyForm_Load, в котором выполняется чтение параметров из файла Panorama.INI.
hImage = MapAccess.mapCreateImage((int)Handle); Отображение карты в окне приложения выполняется в обработчике события MyForm_Paint.
MapAccess.mapDrawImageMapEx(hImage, hMap, ref MapRect, 0, 1);
Для рисования на фоне карты элементов управления, временных объектов и других данных применяется двойная буферизация изображения карты. Второй буфер создается автоматически при рисовании поверх карты в буфере экрана:
// Обновить содержимое второго буфера из первого буфера Готовое изображение из буфера выводится в окно приложения: MapAccess.mapViewImageEx(hImage, (int)Handle, ref MapRect); Для обработки сообщений от GPS \ГЛОНАСС-приемника создается таймер (поток обработки сообщений). ServiceAction = new TimerCallback (ServiceActionByTime); Обработка сообщений содержится в файле MapEvent . cs . ServiceTimer = new System.Threading. Timer (ServiceAction, null , 1000, 1000); Описание класса доступа к GPS \ГЛОНАСС-приемнику содержится в MapGps . cs . Для безопасного вызова функций из другого потока применяется метод Invoke. При необходимости выполнения обновления окна карты из разных потоков вызывается функция Refresh , применяющая для безопасности критическую секцию ( lock): public override void Refresh() Для применения функций и структур MAPAPI-интерфейса их прототипы опи-саны в TMapAccess.cs. Для передачи строковых параметров используются функции, имеющие в названии суффикс “Un”. StructLayout ( LayoutKind .Sequential, CharSet = CharSet .Auto)] Для обработки событий от кнопок и выполнения различных операций на карте используется базовый класс MapAction, описанный в MapAction.cs.
Рис. 4. Вид диалога при проектировании В файлах CreateParm.cs, FContents.cs, FGps.cs, MapDialogs.cs и других содержится реализация различных диалогов.
Рис. 5. Вид диалога при выполнении программы Обработчики сообщений от главного меню описаны в MapMenu.cs.
Отладка приложения Разработанное приложение может быть протестировано на реальном устройстве или эмуляторе. Для выполнения приложения на устройстве или эмуляторе должны копироваться следующие данные: выполняемый модуль (EXE), библиотека ГИС-ядра (mapaxlib.dll), библиотека обработки графа дорог (mapgraph.dll) и библиотеки NET Compact Framework (при необходимости).
Рис. 6. Настройка свойств библиотеки для автоматического копирования Для автоматического копирования библиотек NET Compact Framework (при не-обходимости) необходимо в свойствах проекта (PanoramaMobile Properties) включить параметр Deploy the latest version of the .NET Compact Framework.
Рис. 7. Настройка параметров проекта Для запуска приложения в режиме отладки необходимо выбрать тип устройства (например, USA Windows Mobile 5.0 Pocket PC R2 Emulator) и нажать кнопку Debug.
Рис. 8. Настройка типа устройства Чтобы открыть карту в эмуляторе, необходимо на рабочем компьютере подготовить папку с картой и указать путь к папке в параметрах эмулятора.
Рис. 9. Настройка параметров эмулятора Для этого нужно выбрать в главном меню окна эмулятора пункт “ File \ Configure …” и указать путь к папке с картой в поле Shared Folder .
Рис. 10. Настройка пути к папке с картой
Для обеспечения доступа и работы с электронной векторной картой местности, получения изображения карты, поиска в карте и в других задач используются функции интерфейса MAPAPI библиотеки ГИС-ядра – mapaxlib.dll. Программный код, выполняющийся под управлением среды Microsoft .NET Framework, называется управляемым кодом. И наоборот, код, который выполняется вне среды выполнения, называется неуправляемым кодом. Примерами неуправляемого программного кода и являются функции интерфейса MAPAPI. Для взаимодействия с библиотеками DLL используется платформенный вызов неуправляемых функций. Платформенный вызов – служба .NET Framework, которая позволяет управляемому программному коду вызывать неуправляемые функции, реа-лизованные в библиотеках DLL. Платформенный вызов находит и вызывает экспортируемую функцию и по мере необходимости выполняет маршалинг ее аргументов (чисел, строк, структур и так далее) в границах взаимодействия. В GIS ToolKit Mobile для платформенного вызова используется класс MapAccess. Большинство типов данных имеют общее представление, как в управляемом, так и в неуправляемом кодах (int, float и т.д.). Другие типы данных могут иметь неодно-значное представление (char* в качестве возвращаемого значения неуправляемой функции) или вообще не быть представленными (char**) в управляемой памяти. Маршалер взаимодействия обеспечивает инструкции для представления различных типов данных в управляемый тип.
Ниже приводятся примеры на C# создания прототипов управляемых функций для передачи аргументов и получения значений от MAPAPI функций. Особый случай представляет передача структур в качестве параметра функции. Показано применение атрибута MarshalAs и класса Marshal для явного маршалинга данных при использовании структур и строк. Пусть класс для платформенного вызова функций MAPAPI называется Interop. Строка в качестве входного или выходного параметра MAPAPI функции. Значение строки среды . NET Framework не может быть изменено неуправляемой функцией. Поэтому при использовании строки в качестве буфера для размещения результата, необходимо применять класс StringBuilder . long int _MAPAPI mapSemanticValueUn(HOBJ info, long int number, WCHAR * value, long int size); Управляемый прототип в классе MapAccess имеет вид: [DllImport(GisLibrary, CharSet = CharSet.Auto)]
private static extern int mapSemanticValueUn(int info, int number,
StringBuilder sb,
int bufsize);
public static string netSemanticValue(int hobj, int number)
{
StringBuilder sb = new StringBuilder(256);
if (mapSemanticValueUn(hobj, number, sb, sb.Capacity) == 0)
return "";
return sb.ToString();
}
Вызов функции в коде на C#: string semvalue = MapAccess.netSemanticValue(hObj, i); Передача функции структуры, содержащей числовые поля и строки. В данном примере показано объявление структуры в управляемом коде и передача ее типа в качестве параметра функции mapCreateSiteUn. Структура передается по ссылке, так как функция должна получить указатель на структуру. typedef struct CREATESITEUN Объявления в TMapAccess.cs:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CREATESITEUN // СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКОЙ КАРТЫ
{
public int Length; // Длина записи структуры - 328
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string MapName; // Имя района в кодировке UNICODE
public int MapType; // Обобщенный тип карты
public int MaterialProjection; // Проекция исх. материала
public int EllipsoideKind; // Тип эллипсоида (1 - Красовского, 9 - WGS84,...)
public int Scale; // Знаменатель масштаба карты
public int Reserve; // Резерв (должен быть 0)
// В радианах:
public double FirstMainParallel; // Первая главная параллель
public double SecondMainParallel; // Вторая главная параллель
public double AxisMeridian; // Осевой меридиан
public double MainPointParallel; // Параллель главной точки
public double PoleLatitude; // Широта полюса проекции
public double PoleLongitude; // Долгота полюса проекции
public void Init()
{
Length = 328;
MapName = "User map";
MapType = (int)MAPTYPE.SEANAUTIC;
MaterialProjection = (int)MAPPROJECTION.MERCATORMAP;
EllipsoideKind = (int)ELLIPSOIDKIND.WGS_84;
Scale = 10000;
Reserve = 0;
FirstMainParallel = 0;
SecondMainParallel = 0;
AxisMeridian = 0;
MainPointParallel = 0;
PoleLatitude = 0;
PoleLongitude = 0;
}
}
Управляемый прототип функции в классе MapAccess:
// Create user map
// mapname - name of map file (*.sit)
// rscname - name of classifier file (must be exist)
// createsite - map parameters
// sheetname - map title
// If the function fails, the return value is zero
[DllImport(GisLibrary, CharSet = CharSet.Auto)]
public static extern int mapCreateSiteUn(string mapname,
string rscname,
ref CREATESITEUN createsite);
Вызов функции в коде на C#:
CREATESITEUN csite = new CREATESITEUN();
csite.Init();
csite.MapName = name.Substring(pos);
csite.MapType = (int)MAPTYPE.SEANAUTIC; // Mercator map
csite.Scale = 10000; // 1 : 10 000
csite.EllipsoideKind = (int)ELLIPSOIDKIND.WGS_84;
hMap = MapAccess.mapCreateSiteUn(MapName, rscname, ref csite);
Более подробную информацию о маршалинге данных и платформенном вызове функций DLL в среде .NET Framework можно найти на сайте компании Microsoft http://msdn.microsoft.com.
РАЗВЕРТЫВАНИЕ ГОТОВОГО ПРИЛОЖЕНИЯ Для установки готового приложения на КПК пользователя могут использоваться инсталляционные файлы формата CAB .
Рис. 11. Общий вид проекта для сборки CAB-файла В состав GIS ToolKit Mobile входит пример проекта для сборки файла CAB. В проект включаются все файлы, которые устанавливаются на КПК и указывается место размещения приложения (например, в папке Programs Folder) и название создаваемого ярлыка для запуска приложения (например, GIS Panorama Mobile 4.0). Для работы приложения необходимо подготовить и разместить на КПК карто-графические данные.
Рис. 12. Подготовка данных для КПК При работе с векторной картой на большую территорию рекомендуется разде-лить ее на несколько листов - ГИС «Карта 2008», меню Задачи / Запуск приложений / Обработка листов карт и генерализация / Формирование листов карт по координатам.
|
||
| Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены | | Статьи | Обучение | Контакты |
|
|||
| Copyright © Panorama Group 1991- 2012 |
||||