Программный интерфейс для доступа к данным мониторинга

Для решения задач интеграции с различными системами автоматизированного учета автотранспорта в «Навигаторе+» реализован программный интерфейс, основанный на компонентной модели объекта (COM), а именно — автоматный сервер, реализующий COM-интерфейс IDispatch. С помощью этого интерфейса любая внешняя программа, поддерживающая OLE-технологию автоматного контейнера, может получить доступ к информации о перемещениях и свойствах транспортных средств, о посещении контрольных точек, о расходе топлива и т.п. В настоящее время практически все известные средства разработки приложений для автоматизации деятельности предприятий являются автоматными контейнерами — MS Excel, MS Word, MS Access, 1C, и др. Сюда отностится любое средство автоматизации, включающее в себя Visual Basic, поскольку последний, помимо всего прочего, является и автоматным контейнером. В настоящем разделе описаны методы, реализованные в программном интерфейсе «Навигатора+» и приведены примеры их использования.

Примеры использования методов реализованы на MS Visual Basic для MS Excel.

Конструирование

Создание объекта класса GisDatabase

Синтаксис (Visual Basic)
CreateObject ("NMap.GisDatabaes")
		                            

Параметры

NMap.GisDatabase
Имя компонента OLE.

Возвращаемое значение

Ссылка на созданный объект, реализующий интерфейс IDispatch
База данных успешно октрыта

Описание

Для использования методов объекта GisDatabase необходимо сначала его создать. Для этого служит стандартный метод CreateObject реализующего технологию автоматного контейнера языка Visual Basic. В некоторых других автоматных контейнерах синтаксис для вызова этого метода может быть другим, например, в 1С вместо CreateObject используется вызов «СоздатьОбъект», в остальном синтаксис вызова остается таким же.

Для успешного создания объекта NMap.GisDatabase программа мониторинга (NMap.exe) должна быть предварительно запущена хотя бы один раз, поскольку автоматный сервер, встроенный в программу мониторинга, должен сообщить подсистеме Windows для поддержки COM-приложений о реализованных в нем объектах. Информация о реализованных COM-объектах сохраняется в системном реестре Windows, в разделе HKEY_CLASSES_ROOT. При наличии ограничений на права доступа к этому разделу реестра для пользовательских приложений (например, в случае Windows Vista c включенным режимом контроля учетных записей) может потребоваться однократный запуск программы мониторинга от имени администратора.

ВАЖНО: В процессе использования автоматного интерфейса сам «Навигатор+» не должен быть запущен.

Пример

Sub OpenDatabase()
    Dim a As object
    
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
End Sub
                                    

GisDatabase::Open

Синтаксис
BOOL Open (LPCTSTR szDbPath);
		                            

Параметры

LPCTSTR szDbPath
Путь к геоинформационной базе данных. Как правило это путь к каталогу, в который был установлен «Навигатор+»

Возвращаемое значение

TRUE
База данных успешно октрыта
FALSE
Базу данных открыть не удалось. Проверьте, правильно ли указан путь, существует ли в нем подкаталог Gps, работает ли «Навигатор+».

Описание

Сразу после создания объкта класса GisDatabase необходимо вызвать эту функцию. Из указанного в качестве параметра каталога метод Open загружает служебную ифнформацию, содержащуюся в картографической базе данных, затем пытается найти подкаталог Gps и файл firms.gps в нем и считывает из последнего информацию о зарегистрированных транспортных средствах и имеющихся контрольных точках. После успешного открытия базы данных можно вызывать другие методы класса GisDatabase.

ВАЖНО: В процессе использования автоматного интерфейса сам «Навигатор+» не должен быть запущен.

Пример

Sub OpenDatabase()
    Dim a As object
    
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' База данных открыта - объект можно использовать
End Sub
                                    

Доступ к объектам мониторинга

GisDatabase::GetGroupsCount

Синтаксис
long GetGroupsCount ();
		                            

Возвращаемое значение

Метод возвращает количество зарегистрированных групп транспортных средств. В случае ошибки возвращается 0.

Описание

Транспортные средства, отслеживаемые системой мониторинга «Навигатор+», объединяются в группы. Схема работы предполагает наличие хотя бы одной группы. Полученное значение можно использовать для последовательного просмотра всех групп транспортных средств.

Пример

Sub TestGetGroups ()                                    
    Dim a As object
    Dim nGoups As Integer
    
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Получаем количество групп
    Let nGroups = a.GetGroupsCount ()
    
    For i=0 To nGroups-1
        
        ' Плучаем имя i-ой группы
        strGroupName = a.GetGroupName (i)
        
    Next i
End Sub
                                    

GisDatabase::GetRoversCount

Синтаксис
long GetRoversCount (long nGroupIndex);
		                            

Параметры

long nGroupIndex
Порядковый номер группы транспортных средств начиная с 0. Нумерация начинается с 0, максимально допустимый порядковый номер на единицу меньше количества групп.

Возвращаемое значение

Метод возвращает количество транспортных средств, принадлежащих группе. В случае ошибки возвращается 0.

Описание

Метод следует использовать для последовательного доступа к транспортным средствам группы.

Пример

Sub TestGetRovers ()                                    
    Dim a As object
    Dim nGoups As Integer
    Dim nRovers As Integer
    Dim nGroup As Integer
    Dim nRover As Integer
    Dim nRoverID As Integer
    
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Получаем количество групп
    Let nGroups = a.GetGroupsCount ()
    
    For nGroup=0 To nGroups-1
        
        ' Получаем кол-во транспортных средств в группе
        nRovers = a.GetRoversCount (nGroup)
        
        For nRover=0 To nRovers-1
            
            ' Получаем идентификатор модуля для транспортного средства с номером nRover
            nRoverID = a.GetRoverID (nGroup, nRover)
            
        Next nRover
        
    Next nGroup
End Sub    
                                    

GisDatabase::GetRoverID

Синтаксис
long GetRoverID (long nGroupIndex, long nRoverIndex);
		                            

Параметры

long nGroupIndex
Порядковый номер группы транспортных средств начиная с 0. Нумерация начинается с 0, максимально допустимый порядковый номер на единицу меньше количества групп.
long nRoverIndex
Порядковый номер транспортного средства в группе начиная с 0. Нумерация начинается с 0, максимально допустимый порядковый номер на единицу меньше количества транспортных средств в группе.

Возвращаемое значение

Метод возвращает идентификтор GPS/GPRS модуля. В случае ошибки возвращается 0.

Описание

Идентификатор GPS/GPRS модуля, полученный с помощью этого метода, можно использовать для получения остальной информации о нем, включая пробег за преиод, расход топлива и т.п.

Пример

Sub TestGetRoverID ()                                    
    Dim a As object
    Dim nGoups As Integer
    Dim nRovers As Integer
    Dim nGroup As Integer
    Dim nRover As Integer
    Dim nRoverID As Integer
    
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Получаем количество групп
    Let nGroups = a.GetGroupsCount ()
    
    For nGroup=0 To nGroups-1
        
        ' Получаем кол-во транспортных средств в группе
        nRovers = a.GetRoversCount (nGroup)
        
        For nRover=0 To nRovers-1
            
            ' Получаем идентификатор модуля для транспортного средства с номером nRover
            nRoverID = a.GetRoverID (nGroup, nRover)
            
        Next nRover
        
    Next nGroup
End Sub    
                                    

GisDatabase::GetRoverName

Синтаксис
BSTR GetRoverName (long nRoverID);
		                            

Параметры

long nRoverID
Идентификатор GPS/GPRS модуля.

Возвращаемое значение

Метод возвращает имя, присвоенное транспортному средству с данным идентификатором.

Описание

Имя — произвольная текстовая строка. Можно использовать его в различных отчетах.

Пример

Sub TestGetRoverName ()                                    
    Dim a As object
    Dim nGoups As Integer
    Dim nRovers As Integer
    Dim nGroup As Integer
    Dim nRover As Integer
    Dim nRoverID As Integer
    
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Получаем количество групп
    Let nGroups = a.GetGroupsCount ()
    
    ' Заголовок таблицы
    Range ("A1").Offset (0, 0) = "Группа"
    Range ("A1").Offset (0, 1) = "Идентификатор GPS/GPRS модуля"
    Range ("A1").Offset (0, 2) = "Транспортное средство"
    
    nRow = 1
    
    For nGroup=0 To nGroups-1
        
        ' Получаем кол-во транспортных средств в группе
        nRovers = a.GetRoversCount (nGroup)
        
        ' Записываем имя группы в Excel
        Range ("A1").Offset (nRow, 0) = strGroupName
        nRow = nRow + 1
        
        For nRover=0 To nRovers-1
            
            ' Получаем идентификатор ровера с номером nRover
            nRoverID = a.GetRoverID (nGroup, nRover)
            
            ' Имя ровера
            strName = a.GetRoverName (nRoverID)
            
             ' Записываем результат в Excel
            Range ("A1").Offset (nRow, 1) = nRoverID
            Range ("A1").Offset (nRow, 2) = strName
            
            nRow = nRow + 1
            
        Next nRover
        
    Next nGroup
End Sub    
                                    

GisDatabase::GetRoverRun

Синтаксис
double GetRoverRun (long nRoverID, DATE tFrom, DATE tUpTo);
		                            

Параметры

long nRoverID
Идентификатор GPS/GPRS модуля.
DATE tFrom
Начало периода измерения пробега.
DATE tUpTo
Конец периода измерения пробега.

Возвращаемое значение

Пробег в километрах.

Описание

Пробег вычисляется на основании загруженных в локальную базу данных траекторий. Если какие-то фрагменты траекторий для заданного периода еще не загружены, они не будут учтены, и вычисленный пробег не будет соответствовать реальному. Для одного и того же периода значение пробега должно совпадать с пробегом, вычисленным с помощью встроенных в «Навигатор+» отчетов.

Пример

Sub TestGetRoverRun ()                                    
    Dim a As object
    Dim nGoups As Integer
    Dim nRovers As Integer
    Dim nGroup As Integer
    Dim nRover As Integer
    Dim nRoverID As Integer
    Dim tToday As Date
    Dim tTonight As Date
    Dim dRun As Double
    
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If

    ' Устанавливаем даты начала и конца периода (пробег за сегодня)
    tToday = CDate(FormatDateTime(Now, vbShortDate))
    tTonight = CDate(FormatDateTime(Now, vbShortDate) & " 23:59:59")
    
    ' Получаем количество групп
    Let nGroups = a.GetGroupsCount ()
    
    ' Заголовок таблицы
    Range ("A1").Offset (0, 0) = "Группа"
    Range ("A1").Offset (0, 1) = "Транспортное средство"
    Range ("A1").Offset (0, 2) = "Пробег"
    
    nRow = 1
    For nGroup=0 To nGroups-1
    
        strGroupName = a.GetGroupName (nGroup)
        
        ' Записываем имя группы в Excel
        Range ("A1").Offset (nRow, 0) = strGroupName
        nRow = nRow + 1
        
        ' Получаем кол-во транспортных средств в группе
        nRovers = a.GetRoversCount (nGroup)
        
        For nRover=0 To nRovers-1

            
            ' Получаем идентификатор ровера с номером nRover
            nRoverID = a.GetRoverID (nGroup, nRover)
            
            ' Пробег ровера
            dRun = a.GetRoverRun (nRoverID, tToday, tTonight)
            
            ' Записываем результат в Excel
            Range ("A1").Offset (nRow, 1) = a.GetRoverName (nRover)
            Range ("A1").Offset (nRow, 2) = dRun
            
            nRow = nRow + 1
        Next nRover
        
    Next nGroup
End Sub    
                                    

Анализ посещений контрольных точек

GisDatabase::GetCtrlPtName

Синтаксис
BSTR GetCtrlPtName (long nPointID);
		                            

Параметры

long nPointID
Идентификатор контрольной точки.

Возвращаемое значение

Имя контрольной точки с данным идентификатором.

Описание

Метод позволяет получить имя контрольной точки для заданного идентификатора. Идентификатор контрольной точки можно увидеть впрограмме мониторинга, в окне ее свойств.

Пример

Sub TestVisits ()                                    
    Dim a As object
     
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If

    ' Получаем имя контрольной точки с идентификатором 14
    Range ("A1").Offset (1, 1) = a.GetCtrlPtName (14)
    
End Sub    
                                    

GisDatabase::DetectVisits

Синтаксис
long DetectVisits (long nRoverID, long nCtrlPtID, DATE tFrom, DATE tUpTo, long nMinVisitTime);
		                            

Параметры

long nRoverID
Идентификатор GPS/GPRS модуля.
long nCtrlPtID
Идентификатор контрольной точки. Его можно увидеть в окне свойств контрольной точки.
DATE tFrom
Начало периода измерения пробега.
DATE tUpTo
Конец периода измерения пробега.
long nMinVisitTime
Минимальное время пребывания на точке в минутах, при котором детектируется посещение.

Возвращаемое значение

Количество посещений контрольной точки указанным транспортным средством за указанный период.

Описание

Для детектирования посещений контрольной точки транспортным средством сначала вызывается функция DetectVisits, которая возвращает количество продетектированных посещений. Затем, с помощью методов GetVisitIn, GetVisitOut можно получить информацию о каждом из детектированных посещений. Параметр nMinVisitTime позволяет задает минимальное время пребывания, которое считается посещением. Например, 5 минут. В процессе детектирования посещений используются уже загруженные в локальную геоинформационную базу данных траектории транспортного средства. Если какие-то данные еще не загружены, информация о посещениях будет не полной.

Пример

Sub TestVisits ()                                    
    Dim a As object
    Dim nVisits As Integer
    Dim nVisit As Integer
    Dim tToday As Date
    Dim tTonight As Date
     
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime(Now, vbShortDate))
    tTonight = CDate(FormatDateTime(Now, vbShortDate) & " 23:59:59")
    
    ' Определяем количество посещений контрольной точки 10
    ' транспортным средством с GPS/GPRS модулем 22873
    Let nVisits = a.DetectVisits (22873, 10, tToday, tTonight, 5)
    
    ' Заголовок таблицы
    Range ("A1").Offset (0, 0) = "Номер посещения"
    Range ("A1").Offset (0, 1) = "Прибыл"
    Range ("A1").Offset (0, 2) = "Убыл"
    
    For nVisit=0 To nVisits-1
        
        ' Получаем информацию о посещении с номером nVisit
        tIn = a.GetVisitIn (nVisit)
        tOut = a.GetVisitOut (nVisit)
        
        ' Записываем результат в Excel
        Range ("A1").Offset (nVisit+1, 0) = nVisit
        Range ("A1").Offset (nVisit+1, 1) = tIn
        Range ("A1").Offset (nVisit+1, 2) = tOut
        
    Next nVisit
End Sub    
                                    

GisDatabase::GetVisitIn, GetVisitOut, GetVisitName, HasVisitIn, HasVisitOut

Синтаксис
BOOL HasVisitIn (long nVisit);
DATE GetVisitIn (long nVisit);
BOOL HasVisitOut (long nVisit);
DATE GetVisitOut (long nVisit);
BSTR GetVisitName (long nVisit);
		                            

Параметры

long nVisit
Порядковый номер посещения контрольной точки начиная с 0.

Возвращаемое значение

HasVisitIn
TRUE, если было определено время прибытия. FALSE, если транспортное средство уже находилось на контрольной точке до начала периода измерений.
GetVisitIn
Время прибытия на контрольную точку.
HasVisitOut
TRUE, если было определено время ухода. FALSE, если транспортное средство на конец периода измерений все еще находилось на контрольной точке.
GetVisitOut
Время ухода с контрольной точки.
GetVisitName
Название контрольной точки.

Описание

Для детектирования посещений контрольной точки транспортным средством сначала вызывается функция DetectVisits, которая возвращает количество продетектированных посещений. Затем, с помощью методов HasVisitIn, GetVisitIn, HasVisitOut, GetVisitOut, GetVisitName для каждого посещения можно получить информацию о времени прибытия и ухода и о названии контрольной точки. Если индекс посещения nVisit меньше 0 либо больше или равен количеству посещений функции возвращают 0. Если для данного посещения не существует времени прибытия (транспортное средство на начало периода детектирования посещений уже находилось на контрольной точке) функция GetVisitIn возвращает 0. Если для данного посещения не существует времени ухода (транспортное средство на конец периода детектирования посещений все еще находилось на контрольной точке) функция GetVisitOut возвращает 0.

Пример

Sub TestVisits ()                                    
    Dim a As object
    Dim nVisits As Integer
    Dim nVisit As Integer
    Dim tToday As Date
    Dim tTonight As Date
     
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime(Now, vbShortDate))
    tTonight = CDate(FormatDateTime(Now, vbShortDate) & " 23:59:59")
    
    ' Определяем количество посещений контрольной точки 10
    ' транспортным средством с GPS/GPRS модулем 22873
    Let nVisits = a.DetectVisits (22873, 10, tToday, tTonight, 5)
    
    ' Заголовок таблицы
    Range ("A1").Offset (0, 0) = "Номер посещения"
    Range ("A1").Offset (0, 1) = "Прибыл"
    Range ("A1").Offset (0, 2) = "Убыл"
    
    For nVisit=0 To nVisits-1
        
        ' Получаем информацию о посещении с номером nVisit
        Range("A1").Offset(nRow, 0) = nVisit
        Range("A1").Offset(nRow, 1) = a.GetVisitName(nVisit)
        If a.HasVisitIn(nVisit) Then
            Range("A1").Offset(nRow, 2) = a.GetVisitIn(nVisit)
        End If
        If a.HasVisitOut(nVisit) Then
            Range("A1").Offset(nRow, 3) = a.GetVisitOut(nVisit)
        End If
        
        nRow = nRow + 1
    Next nVisit
End Sub    
                                    

GisDatabase::AddRoutePoint

Синтаксис
BOOL AddRoutePoint (long nCtrlPointID);
		                            

Параметры

long nCtrlPointID
Идентификатор контрольной точки

Возвращаемое значение

В случае успешного добавления контрольной точки к маршруту функция возвращает TRUE. Если контрольная точка с заданным идентификатором не найдена возвращается FALSE

Описание

Для анализа посещения транспортным средством нескольких контрольных точек можно использовать группу методов для работы с маршрутами. Сначала необходимо выбрать множество контрольных точек используя функцию AddRoutePoint, затем вызвать метод DetectRouteVisits, а затем можно использовать методы GetVisitIn, GetVisitOut, GetVisitName для получения информации о посещении выбранного множества контрольных точек.

Пример

Sub TestRoute ()                                    
    
    Dim a As Object
    Dim tToday As Date
    Dim tTomorrow As Date
    
    Set a = CreateObject("NMap.GisDatabase")
    
    ' Создаем объект класса GisDatabase
    If Not a.Open("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Создаем маршрут
    Call a.ClearRoute
    a.AddRoutePoint (1)
    a.AddRoutePoint (2)
    a.AddRoutePoint (3)
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime("08.12.2010", vbShortDate)) ' Now, vbShortDate))
    tTomorrow = CDate(FormatDateTime("08.12.2010", vbShortDate) & " 23:59:59")

    '
    ' Определяем посещения контрольных точек
    nCount = a.DetectRouteVisits(5, tToday, tTomorrow, 5)
    
    nRow = 1
    For nVisit = 0 To nCount - 1
        
        ' Получаем информацию о посещении с номером nVisit
        Range("A1").Offset(nRow, 1) = a.GetVisitName(nVisit)
        If a.HasVisitIn(nVisit) Then
            Range("A1").Offset(nRow, 2) = a.GetVisitIn(nVisit)
        End If
        If a.HasVisitOut(nVisit) Then
            Range("A1").Offset(nRow, 3) = a.GetVisitOut(nVisit)
        End If
        
        nRow = nRow + 1
    Next nVisit
    
End Sub    
                                    

GisDatabase::ClearRoute

Синтаксис
void ClearRoute ();
		                            

Описание

Метод очищает список выбранных ранее контрольных точек.

Пример

Sub TestRoute ()                                    
    
    Dim a As Object
    Dim tToday As Date
    Dim tTomorrow As Date
    
    Set a = CreateObject("NMap.GisDatabase")
    
    ' Создаем объект класса GisDatabase
    If Not a.Open("c:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Создаем маршрут
    Call a.ClearRoute
    a.AddRoutePoint (1)
    a.AddRoutePoint (2)
    a.AddRoutePoint (3)
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime("08.12.2010", vbShortDate)) ' Now, vbShortDate))
    tTomorrow = CDate(FormatDateTime("08.12.2010", vbShortDate) & " 23:59:59")

    '
    ' Определяем посещения контрольных точек
    nCount = a.DetectRouteVisits(5, tToday, tTomorrow, 5)
    
    nRow = 1
    For nVisit = 0 To nCount - 1
        
        ' Получаем информацию о посещении с номером nVisit
        Range("A1").Offset(nRow, 1) = a.GetVisitName(nVisit)
        If a.HasVisitIn(nVisit) Then
            Range("A1").Offset(nRow, 2) = a.GetVisitIn(nVisit)
        End If
        If a.HasVisitOut(nVisit) Then
            Range("A1").Offset(nRow, 3) = a.GetVisitOut(nVisit)
        End If
        
        nRow = nRow + 1
    Next nVisit

End Sub    
                                    

GisDatabase::DetectRouteVisits

Синтаксис
long DetectRouteVisits(long nRoverID, DATE tFrom, DATE tUpTo, long nMinVisitTime);
		                            

Параметры

long nRoverID
Идентификатор ровера
DATE tFrom
Дата и время начала интервала наблюдения
DATE tUpTo
Дата и время конца интервала наблюдения
long nMinVisitTime
Минимальная длительность пребывания на контрольной точке в минутах, которая считается посещением

Возвращаемое значение

Количество посещений точек маршрута

Описание

Для анализа посещения транспортным средством нескольких контрольных точек можно использовать группу методов для работы с маршрутами. Сначала необходимо выбрать множество контрольных точек используя функцию AddRoutePoint, затем вызвать метод DetectRouteVisits, а затем можно использовать методы GetVisitIn, GetVisitOut, GetVisitName для получения информации о посещении выбранного множества контрольных точек.

Пример

Sub TestRoute ()                                    
    
    Dim a As Object
    Dim tToday As Date
    Dim tTomorrow As Date
    
    Set a = CreateObject("NMap.GisDatabase")
    
    ' Создаем объект класса GisDatabase
    If Not a.Open("c:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Создаем маршрут
    Call a.ClearRoute
    a.AddRoutePoint (1)
    a.AddRoutePoint (2)
    a.AddRoutePoint (3)
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime("08.12.2010", vbShortDate)) ' Now, vbShortDate))
    tTomorrow = CDate(FormatDateTime("08.12.2010", vbShortDate) & " 23:59:59")

    '
    ' Определяем посещения контрольных точек
    nCount = a.DetectRouteVisits(5, tToday, tTomorrow, 5)
    
    nRow = 1
    For nVisit = 0 To nCount - 1
        
        ' Получаем информацию о посещении с номером nVisit
        Range("A1").Offset(nRow, 1) = a.GetVisitName(nVisit)
        If a.HasVisitIn(nVisit) Then
            Range("A1").Offset(nRow, 2) = a.GetVisitIn(nVisit)
        End If
        If a.HasVisitOut(nVisit) Then
            Range("A1").Offset(nRow, 3) = a.GetVisitOut(nVisit)
        End If
        
        nRow = nRow + 1
    Next nVisit

End Sub    
                                    

Анализ истории перемещений транспортных средств

GisDatabase::DetectSegments

Синтаксис
long DetectSegments (long nRoverID, DATE tFrom, DATE tUpTo);
		                            

Параметры

long nRoverID
Идентификатор ровера
DATE tFrom
Дата и время начала интервала наблюдения
DATE tUpTo
Дата и время конца интервала наблюдения

Возвращаемое значение

Количество сегментов (стоянок и интревалов движения) в интервале наблюдения

Описание

Для анализа истории перемещений транспортного средства на предмет наличия стоянок и интервалов движения, сначала вызывается функция DetectSegments, которая возвращает количество найденных сегментов в пределах заданного интервала наблюдения. Затем, с помощью методов GetSegmentType, GetSegmentIn, GetSegmentOut, GetSegmentLocation, GetSegmentRun для каждого сегмента можно получить информацию о его параметрах.

Пример

Sub TestSegments ()                                    
    Dim a As object
    Dim nVisits As Integer
    Dim nVisit As Integer
    Dim tToday As Date
    Dim tTonight As Date
     
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime(Now, vbShortDate))
    tTonight = CDate(FormatDateTime(Now, vbShortDate) & " 23:59:59")
    
    ' Определяем количество сегментов в истории перемещений
    nCount = a.DetectSegments(22873, tToday, tTonight)
    
    ' Заголовок таблицы
    Range ("A1").Offset (0, 0) = "Стоянка / Остановка"
    Range ("A1").Offset (0, 1) = "Начало"
    Range ("A1").Offset (0, 2) = "Конец"
    Range ("A1").Offset (0, 3) = "Место стоянки / Пробег"
    
    nRow = 1
    For nSegment = 0 To nCount - 1
        ' Получаем информацию о сегменте с номером nSegment
        
        nSegmentType = a.GetSegmentType(nSegment)
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 0) = "Движение"
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 0) = "Остановка"
        End If
        
        Range("A1").Offset(nRow, 1) = a.GetSegmentIn(nSegment)
        Range("A1").Offset(nRow, 2) = a.GetSegmentOut(nSegment)
        
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentRun(nSegment)
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentLocation(nSegment)
        End If
        
        nRow = nRow + 1
    Next nSegment
End Sub    
                                    

GisDatabase::GetSegmentType

Синтаксис
long GetSegmentType (long nSegment);
		                            

Параметры

long nSegment
Номер сегмента (начиная с 0).

Возвращаемое значение

Тип сегмента: 1 — движение; 2 — стоянка; 0 — тип не определен

Описание

Для анализа истории перемещений транспортного средства на предмет наличия стоянок и интервалов движения, сначала вызывается функция DetectSegments, которая возвращает количество найденных сегментов в пределах заданного интервала наблюдения. Затем, с помощью методов GetSegmentType, GetSegmentIn, GetSegmentOut, GetSegmentLocation, GetSegmentRun для каждого сегмента можно получить информацию о его параметрах.

Пример

Sub TestSegments ()                                    
    Dim a As object
    Dim nVisits As Integer
    Dim nVisit As Integer
    Dim tToday As Date
    Dim tTonight As Date
     
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime(Now, vbShortDate))
    tTonight = CDate(FormatDateTime(Now, vbShortDate) & " 23:59:59")
    
    ' Определяем количество сегментов в истории перемещений
    nCount = a.DetectSegments(22873, tToday, tTonight)
    
    ' Заголовок таблицы
    Range ("A1").Offset (0, 0) = "Стоянка / Остановка"
    Range ("A1").Offset (0, 1) = "Начало"
    Range ("A1").Offset (0, 2) = "Конец"
    Range ("A1").Offset (0, 3) = "Место стоянки / Пробег"
    
    nRow = 1
    For nSegment = 0 To nCount - 1
        ' Получаем информацию о сегменте с номером nSegment
        
        nSegmentType = a.GetSegmentType(nSegment)
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 0) = "Движение"
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 0) = "Остановка"
        End If
        
        Range("A1").Offset(nRow, 1) = a.GetSegmentIn(nSegment)
        Range("A1").Offset(nRow, 2) = a.GetSegmentOut(nSegment)
        
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentRun(nSegment)
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentLocation(nSegment)
        End If
        
        nRow = nRow + 1
    Next nSegment
End Sub    
                                    

GisDatabase::GetSegmentIn GisDatabase::GetSegmentOut

Синтаксис
DATE GetSegmentIn (long nSegment);
DATE GetSegmentOut (long nSegment);
		                            

Параметры

long nSegment
Номер сегмента (начиная с 0).

Возвращаемое значение

GetSegmentIn
Время начала сегмента
GetSegmentOut
Время конца сегмента

Описание

Для анализа истории перемещений транспортного средства на предмет наличия стоянок и интервалов движения, сначала вызывается функция DetectSegments, которая возвращает количество найденных сегментов в пределах заданного интервала наблюдения. Затем, с помощью методов GetSegmentType, GetSegmentIn, GetSegmentOut, GetSegmentLocation, GetSegmentRun для каждого сегмента можно получить информацию о его параметрах.

Пример

Sub TestSegments ()                                    
    Dim a As object
    Dim nVisits As Integer
    Dim nVisit As Integer
    Dim tToday As Date
    Dim tTonight As Date
     
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime(Now, vbShortDate))
    tTonight = CDate(FormatDateTime(Now, vbShortDate) & " 23:59:59")
    
    ' Определяем количество сегментов в истории перемещений
    nCount = a.DetectSegments(22873, tToday, tTonight)
    
    ' Заголовок таблицы
    Range ("A1").Offset (0, 0) = "Стоянка / Остановка"
    Range ("A1").Offset (0, 1) = "Начало"
    Range ("A1").Offset (0, 2) = "Конец"
    Range ("A1").Offset (0, 3) = "Место стоянки / Пробег"
    
    nRow = 1
    For nSegment = 0 To nCount - 1
        ' Получаем информацию о сегменте с номером nSegment
        
        nSegmentType = a.GetSegmentType(nSegment)
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 0) = "Движение"
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 0) = "Остановка"
        End If
        
        Range("A1").Offset(nRow, 1) = a.GetSegmentIn(nSegment)
        Range("A1").Offset(nRow, 2) = a.GetSegmentOut(nSegment)
        
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentRun(nSegment)
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentLocation(nSegment)
        End If
        
        nRow = nRow + 1
    Next nSegment
End Sub    
                                    

GisDatabase::GetSegmentLocation

Синтаксис
BSTR GetSegmentLocation (long nSegment);
		                            

Параметры

long nSegment
Номер сегмента (начиная с 0).

Возвращаемое значение

Адрес места стоянки или название ближайшего к месту стоянки населенного пункта

Описание

Для анализа истории перемещений транспортного средства на предмет наличия стоянок и интервалов движения, сначала вызывается функция DetectSegments, которая возвращает количество найденных сегментов в пределах заданного интервала наблюдения. Затем, с помощью методов GetSegmentType, GetSegmentIn, GetSegmentOut, GetSegmentLocation, GetSegmentRun для каждого сегмента можно получить информацию о его параметрах. Метод GetSegmentLocation следует вызывать для интервалов типа 2 (стоянок).

Пример

Sub TestSegments ()                                    
    Dim a As object
    Dim nVisits As Integer
    Dim nVisit As Integer
    Dim tToday As Date
    Dim tTonight As Date
     
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime(Now, vbShortDate))
    tTonight = CDate(FormatDateTime(Now, vbShortDate) & " 23:59:59")
    
    ' Определяем количество сегментов в истории перемещений
    nCount = a.DetectSegments(22873, tToday, tTonight)
    
    ' Заголовок таблицы
    Range ("A1").Offset (0, 0) = "Стоянка / Остановка"
    Range ("A1").Offset (0, 1) = "Начало"
    Range ("A1").Offset (0, 2) = "Конец"
    Range ("A1").Offset (0, 3) = "Место стоянки / Пробег"
    
    nRow = 1
    For nSegment = 0 To nCount - 1
        ' Получаем информацию о сегменте с номером nSegment
        
        nSegmentType = a.GetSegmentType(nSegment)
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 0) = "Движение"
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 0) = "Остановка"
        End If
        
        Range("A1").Offset(nRow, 1) = a.GetSegmentIn(nSegment)
        Range("A1").Offset(nRow, 2) = a.GetSegmentOut(nSegment)
        
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentRun(nSegment)
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentLocation(nSegment)
        End If
        
        nRow = nRow + 1
    Next nSegment
End Sub    
                                    

GisDatabase::GetSegmentRun

Синтаксис
double GetSegmentRun (long nSegment);
		                            

Параметры

long nSegment
Номер сегмента (начиная с 0).

Возвращаемое значение

Пробег в километрах

Описание

Для анализа истории перемещений транспортного средства на предмет наличия стоянок и интервалов движения, сначала вызывается функция DetectSegments, которая возвращает количество найденных сегментов в пределах заданного интервала наблюдения. Затем, с помощью методов GetSegmentType, GetSegmentIn, GetSegmentOut, GetSegmentLocation, GetSegmentRun для каждого сегмента можно получить информацию о его параметрах. Метод GetSegmentRun следует вызывать для интервалов типа 1 (движение).

Пример

Sub TestSegments ()                                    
    Dim a As object
    Dim nVisits As Integer
    Dim nVisit As Integer
    Dim tToday As Date
    Dim tTonight As Date
     
    ' Создаем объект класса GisDatabase
    Set a = CreateObject ("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime(Now, vbShortDate))
    tTonight = CDate(FormatDateTime(Now, vbShortDate) & " 23:59:59")
    
    ' Определяем количество сегментов в истории перемещений
    nCount = a.DetectSegments(22873, tToday, tTonight)
    
    ' Заголовок таблицы
    Range ("A1").Offset (0, 0) = "Стоянка / Остановка"
    Range ("A1").Offset (0, 1) = "Начало"
    Range ("A1").Offset (0, 2) = "Конец"
    Range ("A1").Offset (0, 3) = "Место стоянки / Пробег"
    
    nRow = 1
    For nSegment = 0 To nCount - 1
        ' Получаем информацию о сегменте с номером nSegment
        
        nSegmentType = a.GetSegmentType(nSegment)
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 0) = "Движение"
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 0) = "Остановка"
        End If
        
        Range("A1").Offset(nRow, 1) = a.GetSegmentIn(nSegment)
        Range("A1").Offset(nRow, 2) = a.GetSegmentOut(nSegment)
        
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentRun(nSegment)
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentLocation(nSegment)
        End If
        
        nRow = nRow + 1
    Next nSegment
End Sub    
                                    

GisDatabase::GetCloseCtrlPoint

Синтаксис
long GetCloseCtrlPoint (long nSegment);
		                            

Параметры

long nSegment
Номер сегмента (начиная с 0).

Возвращаемое значение

Идентификатор контрольной точки, если сегмент с номером nSegment является стоянкой, произошедшей в области одной из контрольных точек текущего маршрута. 0 в противном случае.

Описание

Если перед анализом перемещений автомобиля с помощью метода AddRoutePoint задать маршрут, то для каждого «стояночного» сегмента из истории перемещений с помощью меода GetCloseCtrlPoint можно определить, произошла ли эта стоянка в области контрольной точки, или нет. Это позволяет выделить из множества стоянок характерные, например, офис, магазин, склад и т.п.

Пример

Sub TestSegments ()
    Dim a As Object
    Dim tToday As Date
    Dim tTonight As Date
    
    ' Создаем объект класса GisDatabase
    Set a = CreateObject("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime(Now, vbShortDate))
    tTonight = CDate(FormatDateTime(Now, vbShortDate) & " 23:59:59")

    ' Задаем маршрут
    Call a.ClearRoute
    a.AddRoutePoint (1)
    a.AddRoutePoint (2)
    a.AddRoutePoint (3)
    
    ' Определяем количество сегментов в истории перемещений
    nCount = a.DetectSegments(5, tToday, tTonight)
    
    nRow = 1
    For nSegment = 0 To nCount - 1
        ' Получаем информацию о сегменте с номером nSegment
        nSegmentType = a.GetSegmentType(nSegment)
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 0) = "Движение"
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 0) = "Стоянка"
        End If
        
        Range("A1").Offset(nRow, 1) = a.GetSegmentIn(nSegment)
        Range("A1").Offset(nRow, 2) = a.GetSegmentOut(nSegment)
        
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentRun(nSegment)
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentLocation(nSegment)
            
            ' Для 'стояночных' сегментов проверяем наличие контрольной точки в месте стоянки.
            nPointID = a.GetCloseCtrlPoint(nSegment)
            If nPointID <> 0 Then
                Range("A1").Offset(nRow, 4) = a.GetCtrlPtName(nPointID)
            End If
        End If
        
        nRow = nRow + 1
    Next nSegment
    
End Sub    
                                    

GisDatabase::GetSegmentFuelIn, GisDatabase::GetSegmentFuelOut

Синтаксис
long GetSegmentFuelIn (long nSegment);
long GetSegmentFuelOut (long nSegment);
		                            

Параметры

long nSegment
Номер сегмента (начиная с 0).

Возвращаемое значение

Уровень топлива на начало (GetSegmentFuelIn) и конец (GetSegmentFuelOut) сегмента в литрах. Если данный сегмент траектории не содержит отсчетов топлива, возвращается -1.

Описание

С помощью этих методов можно получить уровень топлива в баке на начало и конец сегмента траектории. Для измерения уровня топлива штатный автомобильный датчик подключается к GPS/GPRS модулю. Поскольку интервал между сообщениями об уровне топлива как правило больше интервала между сообщениями о координатах и скорости, для некоторых сегментов траектории уровень топлива может отсутствовать. В этом случае можно использовать значения уровня топлива из соседних интервалов.

Пример

Sub TestSegments ()
    Dim a As Object
    Dim tToday As Date
    Dim tTonight As Date
    
    ' Создаем объект класса GisDatabase
    Set a = CreateObject("NMap.GisDatabase")
    
    If Not a.Open ("C:\NMap") Then
        ' Обработка ошибки
        MsgBox "Не удалось открыть геоинформационную базу данных!"
        Exit Sub
    End If
    
    ' Устанавливаем даты начала и конца периода (посещения за сегодня)
    tToday = CDate(FormatDateTime(Now, vbShortDate))
    tTonight = CDate(FormatDateTime(Now, vbShortDate) & " 23:59:59")

    ' Определяем количество сегментов в истории перемещений
    nCount = a.DetectSegments(5, tToday, tTonight)
    
    nRow = 1
    For nSegment = 0 To nCount - 1
        ' Получаем информацию о сегменте с номером nSegment
        nSegmentType = a.GetSegmentType(nSegment)
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 0) = "Движение"
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 0) = "Стоянка"
        End If
        
        Range("A1").Offset(nRow, 1) = a.GetSegmentIn(nSegment)
        Range("A1").Offset(nRow, 2) = a.GetSegmentOut(nSegment)
        
        If nSegmentType = 1 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentRun(nSegment)
        ElseIf nSegmentType = 2 Then
            Range("A1").Offset(nRow, 3) = a.GetSegmentLocation(nSegment)
        End If
        
        nFuelIn = a.GetSegmentFuelIn (nSegment)
        If nFuelIn > 0 Then
            Range ("A1").Offset (nRow, 4) = nFuelIn
        End If
        
        nFuelOut = a.GetSegmentFuelOut (nSegment)
        If nFuelOut > 0 Then
            Range ("A1").Offset (nRow, 5) = nFuelOut
        End If
        
        nRow = nRow + 1
    Next nSegment
    
End Sub    
                                    

GisDatabase::GetSegmentLat, GisDatabase::GetSegmentLon

Синтаксис
double GetSegmentLat (long nSegment, long nPoint);
double GetSegmentLon (long nSegment, long nPoint);
		                            

Параметры

long nSegment
Номер сегмента (начиная с 0)
long nPoint
0 — Начало сегмента
1 — Конец сегмента
2 — Средняя точка сегмента (широта начальной точки + широта конечной точки) / 2

Возвращаемое значение

Соответственно широта и долгота характерных точек сегмента движения или стоянки

GisDatabase::GetLastRoverLoc

Синтаксис
GisEpoch GetLastRoverLoc(int nRoverID)
									

Параметры

int nRoverID
Идентификационный номер GPS трекера, установленного на транспортном средстве

Возвращаемое значение

Последние известные позиция (долгота, широта) и скорость транспортного средства и время их получения.

Пример

Sub TestRoverLoc ()
    Dim a As Object
    Dim e As Object
    
    Set a = CreateObject("NMap.GisDatabase")
    
    If Not a.Open("C:\NMap") Then
        MsgBox "Can't open database"
        Exit Sub
    End If
    
    Set e = a.GetLastRoverLoc(120)
    
    Range("A1").Offset(1, 1) = e.t ' Time
    Range("A1").Offset(2, 1) = e.lat ' Latitude
    Range("A1").Offset(3, 1) = e.lon ' Longitude
    Range("A1").Offset(4, 1) = e.vel ' Velocity
End Sub								
									

GisDatabase::GetEpochCount

Синтаксис
int GetEpochCount(long nRoverID, DATE tDate);
									

Параметры

long nRoverID
Идентификатор GPS/GPRS модуля
DATE tDate
Дата

Возвращаемое значение

Количество эпох GPS/GPRS модуля за указанную дату

GisDatabase::GetEpoch

Синтаксис
GisEpoch GetEpoch(long nRoverID, DATE tDate, int nEpoch);
									

Параметры

long nRoverID
Идентификатор GPS/GPRS модуля
DATE tDate
Дата
int nEpoch
Номер интересующей эпохи

Возвращаемое значение

Координаты (долгота, широта) и скорость транспортного средства в указанную эпоху и время этой эпохи.

Пример использования методов GetEpochCount и GetEpoch

Sub GetRoverEpochs()
    Dim a As Object
    Dim e As Object
    Dim epoch As Object
    Dim tDate As Date
    
    Set a = CreateObject("NMap.GisDatabase")
    
    ' Открываем базу данных ГИС
    If Not a.Open("c:\NMap") Then
        MsgBox "Не удалось открыть базу данных ГИС"
        Exit Sub
    End If
    
    nRow = 0
    tDate = #5/1/2013#
    For nDay = 1 To 30
        nEpochCount = a.GetEpochCount(9999, tDate)
        For nEpoch = 0 To nEpochCount - 1
            Set epoch = a.GetEpoch(9999, tDate, nEpoch)
            If epoch.flag = 1 Then
                Range("A1").Offset(nRow, 0) = epoch.t
                Range("A1").Offset(nRow, 1) = epoch.lat
                Range("A1").Offset(nRow, 2) = epoch.lon
                Range("A1").Offset(nRow, 3) = epoch.vel
                nRow = nRow + 1
            End If
        Next nEpoch
        tDate = tDate + 1
    Next nDay
End Sub
									

Получение данных о контрольных точках

GisDatabase::GetCtrlPtGroupsCount

Синтаксис
int GetCtrlPtGroupsCount();
									

Возвращаемое значение

Количество групп контрольных точек.

GisDatabase::GetCtrlPtGroupId

Синтаксис
long GetCtrlPtGroupId(int nCtrlPtGroupIndex);
									

Параметры

int nCtrlPtGroupIndex
Индекс группы контрольных точек (начиная с 0).

Возвращаемое значение

Идентификатор группы контрольных точек c данным индексом.

GisDatabase::GetCtrlPtCount

Синтаксис
int GetCtrlPtCount(long lGroupID);
									

Параметры

long lGroupID
Идентификатор группы контрольных точек.

Возвращаемое значение

Количество контрольных точек в данной группе

GisDatabase::GetCtrlPtPos

Синтаксис
GisEpoch GetCtrlPtPos(long lCtrlPtId);
									

Параметры

long lCtrlPtId
Идентификатор контрольной точки

Возвращаемое значение

Координаты (долгота, широта) контрольной точки.

Пример использования указанных методов

Sub EnumCtrlPoints()
    Dim a As Object
    Dim e As Object
    Dim epoch As Object
    
    Set a = CreateObject("NMap.GisDatabase")
    
    ' Открываем базу данных ГИС
    If Not a.Open("C:\NMap") Then
        MsgBox "Не удалось открыть базу данных ГИС"
        Exit Sub
    End If
    
    nGroups = a.GetCtrlPtGroupsCount()
    
    nRow = 0
    For i = 0 To nGroups - 1
        lGroupID = a.GetCtrlPtGroupId(i)
        nPoints = a.GetCtrlPtCount(lGroupID)
        For j = 0 To nPoints - 1
            lCtrlPointId = a.GetCtrlPtId(lGroupID, j)
            Range("A1").Offset(nRow, 0) = lGroupID
            Range("A1").Offset(nRow, 1) = a.GetCtrlPtName(lCtrlPointId)
            Set epoch = a.GetCtrlPtPos(lCtrlPointId)
            Range("A1").Offset(nRow, 2) = epoch.lat
            Range("A1").Offset(nRow, 3) = epoch.lon
            nRow = nRow + 1
        Next j
    Next i
End Sub
									

Редактирование контрольных точек

GisDatabase::CreateCtrlPtGroup

Синтаксис
long CreateCtrlPtGroup(LPCTSTR strGroupName);
									

Параметры

LPCTSTR strGroupName
Имя создаваемой группы контрольных точек.

Возвращаемое значение

Идентификатор созданной группы контрольных точек.

GisDatabase::CreateCtrlPt

Синтаксис
long CreateCtrlPt(long lGroupID, LPCTSTR strCtrlPtName, double dLat, double dLon, double dRad, long lColor);
									

Параметры

long lGroupID
Идентификатор группы, в которой создается контрольная точка.
LPCTSTR strCtrlPtName
Имя создаваемой контрольной точки.
double dLat
Широта
double dLon
Долгота
double dRad
Радиус контрольной области
long lColor
Цвет.

Возвращаемое значение

Идентификатор созданной контрольной точки.

Пример

Sub EditCtrlPoints()
    Dim a As Object
    Dim e As Object
    Dim epoch As Object
    Dim lColor As Long

    Set a = CreateObject("NMap.GisDatabase")
    
    ' Открываем базу данных ГИС
    If Not a.Open("C:\NMap") Then
        MsgBox "Не удалось открыть базу данных ГИС"
        Exit Sub
    End If
    
    lGroupID = a.CreateCtrlPtGroup("New group")
    If lGroupID = 0 Then
        MsgBox "Can't create group"
        Exit Sub
    End If
    
    lColor = RGB(255, 0, 255)
    lCtrlPtId = a.CreateCtrlPt(lGroupID, "New Control Point", 55.99571777, 37.67042542, 500#, lColor)
    
End Sub
									

GisDatabase::UpdateCtrlPt

Синтаксис
BOOL UpdateCtrlPt (long lCtrlPtID, LPCTSTR strName, double dLat, double dLon, double dRad, long lColor);
									

Параметры

long lCtrlPtID
Идентификатор контрольной точки.
LPCTSTR strName
Имя контрольной точки.
double dLat
Широта.
double dLon
Долгота.
double dRad
Радиус контрольной области.
long lColor
Цвет.

Возвращаемое значение

В случае успешного редактирования параметров контрольной точки возвращается TRUE, иначе FALSE.

GisDatabase::DeleteCtrlPt

Синтаксис
BOOL DeleteCtrlPt (long lCtrlPtID);
									

Параметры

lCtrlPtID
Идентификатор контрольной точки

Возвращаемое значение

В случае успешного удаления контрольной точки TRUE, в противном случае FALSE.