Программный интерфейс для доступа к данным мониторинга.
Для решения задач интеграции с различными системами автоматизированного учета автотранспорта
в «Навигаторе+» реализован программный интерфейс, основанный на компонентной модели
объекта (COM), а именно — автоматный сервер, реализующий COM-интерфейс IDispatch.
С помощью этого интерфейса любая внешняя программа, поддерживающая OLE-технологию
автоматного контейнера, может получить доступ к информации о перемещениях и свойствах
транспортных средств, о посещении контрольных точек, о расходе топлива и т.п. В
настоящее время практически все известные средства разработки приложений для автоматизации
деятельности предприятий являются автоматными контейнерами — MS Excel, MS Word,
MS Access, 1C, и др. Сюда отностится любое средство автоматизации, включающее в
себя Visual Basic, поскольку последний, помимо всего прочего, является и автоматным
контейнером. В настоящем разделе описаны методы, реализованные в программном интерфейсе
«Навигатора+» и приведены примеры их использования.
Конструирование
Создание объекта класса 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 включенным режимом контроля учетных записей)
может потребоваться однократный запуск программы мониторинга от имени администратора.
ВАЖНО: В процессе использования автоматного интерфейса
сам «Навигатор+» не должен быть запущен.
Пример (MS Visual Basic для MS Excel)
|
Sub OpenDatabase()
Dim a As object
Set a = CreateObject ("NMap.GisDatabase")
End Sub
|
GisDatabase::Open
| Синтаксис |
BOOL Open (LPCTSTR szDbPath);
|
Параметры
- LPCTSTR szDbPath
- Путь к геоинформационной базе данных. Как правило это путь к каталогу, в который был установлен «Навигатор+»
Возвращаемое значение
- TRUE
- База данных успешно октрыта
- FALSE
- Базу данных открыть не удалось. Проверьте, правильно ли указан путь, существует ли в нем подкаталог Gps, работает ли «Навигатор+».
Описание
Сразу после создания объкта класса GisDatabase необходимо вызвать эту функцию. Из
указанного в качестве параметра каталога метод Open загружает служебную ифнформацию,
содержащуюся в картографической базе данных, затем пытается найти подкаталог Gps
и файл firms.gps в нем и считывает из последнего информацию о зарегистрированных
транспортных средствах и имеющихся контрольных точках. После успешного открытия
базы данных можно вызывать другие методы класса GisDatabase.
ВАЖНО: В процессе использования автоматного интерфейса
сам «Навигатор+» не должен быть запущен.
Пример (MS Visual Basic для MS Excel)
|
Sub OpenDatabase()
Dim a As object
Set a = CreateObject ("NMap.GisDatabase")
If Not a.Open ("C:\NMap") Then
MsgBox "Не удалось открыть геоинформационную базу данных!"
Exit Sub
End If
End Sub
|
Доступ к объектам мониторинга
GisDatabase::GetGroupsCount
| Синтаксис |
long GetGroupsCount ();
|
Возвращаемое значение
- Метод возвращает количество зарегистрированных групп транспортных средств. В случае ошибки возвращается 0.
Описание
Транспортные средства, отслеживаемые системой мониторинга «Навигатор+», объединяются
в группы. Схема работы предполагает наличие хотя бы одной группы. Полученное значение
можно использовать для последовательного просмотра всех групп транспортных средств.
Пример (MS Visual Basic для MS Excel)
|
Sub TestGetGroups ()
Dim a As object
Dim nGoups As Integer
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
strGroupName = a.GetGroupName (i)
Next i
End Sub
|
GisDatabase::GetRoversCount
| Синтаксис |
long GetRoversCount (long nGroupIndex);
|
Параметры
- long nGroupIndex
- Порядковый номер группы транспортных средств начиная с 0. Нумерация начинается с 0, максимально допустимый порядковый номер на единицу меньше количества групп.
Возвращаемое значение
- Метод возвращает количество транспортных средств, принадлежащих группе. В случае ошибки возвращается 0.
Описание
Метод следует использовать для последовательного доступа к транспортным средствам группы.
Пример (MS Visual Basic для MS Excel)
|
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
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
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 модуля, полученный с помощью этого метода, можно использовать для получения остальной информации о нем, включая пробег за преиод, расход топлива и т.п.
Пример (MS Visual Basic для MS Excel)
|
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
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
nRoverID = a.GetRoverID (nGroup, nRover)
Next nRover
Next nGroup
End Sub
|
GisDatabase::GetRoverName
| Синтаксис |
long GetRoverName (long nRoverID);
|
Параметры
- long nRoverID
- Идентификатор GPS/GPRS модуля.
Возвращаемое значение
- Метод возвращает имя, присвоенное транспортному средству с данным идентификатором.
Описание
Имя — произвольная текстовая строка. Можно использовать его в различных отчетах.
Пример (MS Visual Basic для MS Excel)
|
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
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)
Range ("A1").Offset (nRow, 0) = strGroupName
nRow = nRow + 1
For nRover=0 To nRovers-1
nRoverID = a.GetRoverID (nGroup, nRover)
strName = a.GetRoverName (nRoverID)
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
- Конец периода измерения пробега.
Возвращаемое значение
- Пробег в километрах.
Описание
Пробег вычисляется на основании загруженных в локальную базу данных траекторий.
Если какие-то фрагменты траекторий для заданного периода еще не загружены, они не
будут учтены, и вычисленный пробег не будет соответствовать реальному. Для одного
и того же периода значение пробега должно совпадать с пробегом, вычисленным с помощью
встроенных в «Навигатор+» отчетов.
Пример (MS Visual Basic для MS Excel)
|
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
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)
Range ("A1").Offset (nRow, 0) = strGroupName
nRow = nRow + 1
nRovers = a.GetRoversCount (nGroup)
For nRover=0 To nRovers-1
nRoverID = a.GetRoverID (nGroup, nRover)
dRun = a.GetRoverRun (nRoverID, tToday, tTonight)
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
- Идентификатор контрольной точки.
Возвращаемое значение
- Имя контрольной точки с данным идентификатором.
Описание
Метод позволяет получить имя контрольной точки для заданного идентификатора. Идентификатор контрольной точки можно увидеть впрограмме мониторинга, в окне ее свойств.
Пример (MS Visual Basic для MS Excel)
|
Sub TestVisits ()
Dim a As object
Set a = CreateObject ("NMap.GisDatabase")
If Not a.Open ("C:\NMap") Then
MsgBox "Не удалось открыть геоинформационную базу данных!"
Exit Sub
End If
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 минут. В процессе детектирования посещений используются уже загруженные в локальную геоинформационную базу данных траектории транспортного средства. Если какие-то данные еще не загружены, информация о посещениях будет не полной.
Пример (MS Visual Basic для MS Excel)
|
Sub TestVisits ()
Dim a As object
Dim nVisits As Integer
Dim nVisit As Integer
Dim tToday As Date
Dim tTonight As Date
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 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
tIn = a.GetVisitIn (nVisit)
tOut = a.GetVisitOut (nVisit)
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.
Пример (MS Visual Basic для MS Excel)
|
Sub TestVisits ()
Dim a As object
Dim nVisits As Integer
Dim nVisit As Integer
Dim tToday As Date
Dim tTonight As Date
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 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
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 для получения информации о посещении выбранного множества контрольных точек.
Пример (MS Visual Basic для MS Excel)
|
Sub TestRoute ()
Dim a As Object
Dim tToday As Date
Dim tTomorrow As Date
Set a = CreateObject("NMap.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
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 ();
|
Описание
Метод очищает список выбранных ранее контрольных точек.
Пример (MS Visual Basic для MS Excel)
|
Sub TestRoute ()
Dim a As Object
Dim tToday As Date
Dim tTomorrow As Date
Set a = CreateObject("NMap.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
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 для получения информации о посещении выбранного множества контрольных точек.
Пример (MS Visual Basic для MS Excel)
|
Sub TestRoute ()
Dim a As Object
Dim tToday As Date
Dim tTomorrow As Date
Set a = CreateObject("NMap.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
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 для каждого сегмента можно получить информацию о его параметрах.
Пример (MS Visual Basic для MS Excel)
|
Sub TestSegments ()
Dim a As object
Dim nVisits As Integer
Dim nVisit As Integer
Dim tToday As Date
Dim tTonight As Date
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
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 для каждого сегмента можно получить информацию о его параметрах.
Пример (MS Visual Basic для MS Excel)
|
Sub TestSegments ()
Dim a As object
Dim nVisits As Integer
Dim nVisit As Integer
Dim tToday As Date
Dim tTonight As Date
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
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 для каждого сегмента можно получить информацию о его параметрах.
Пример (MS Visual Basic для MS Excel)
|
Sub TestSegments ()
Dim a As object
Dim nVisits As Integer
Dim nVisit As Integer
Dim tToday As Date
Dim tTonight As Date
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
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 (стоянок).
Пример (MS Visual Basic для MS Excel)
|
Sub TestSegments ()
Dim a As object
Dim nVisits As Integer
Dim nVisit As Integer
Dim tToday As Date
Dim tTonight As Date
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
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 (движение).
Пример (MS Visual Basic для MS Excel)
|
Sub TestSegments ()
Dim a As object
Dim nVisits As Integer
Dim nVisit As Integer
Dim tToday As Date
Dim tTonight As Date
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
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 можно определить, произошла ли эта стоянка в области контрольной точки, или нет. Это позволяет выделить из множества стоянок характерные, например, офис, магазин, склад и т.п.
Пример (MS Visual Basic для MS Excel)
|
Sub TestSegments ()
Dim a As Object
Dim tToday As Date
Dim tTonight As Date
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
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 модулю. Поскольку интервал между сообщениями об уровне топлива как правило больше интервала между сообщениями о координатах и скорости, для некоторых сегментов траектории уровень топлива может отсутствовать. В этом случае можно использовать значения уровня топлива из соседних интервалов.
Пример (MS Visual Basic для MS Excel)
|
Sub TestSegments ()
Dim a As Object
Dim tToday As Date
Dim tTonight As Date
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
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
Возвращаемое значение
- Соответственно широта и долгота характерных точек сегмента движения или стоянки