Quicklinks
This case study describes a scenario where a customer wants to track a number of trucks using GPS and SMS. SMS is used since the phone network is a very large and robust network that is available almost anywhere. When trucks are only sending out their locations 2 or 4 times per hour it can be a very cost effective solution as well.
This case study shows how to track trucks and plot them on a Google Maps web interface.
A transport company wants to upgrade their fleet management system by incorporating a system which is able to dynamically track the location of their trucks. They need to have the location of their trucks available in real time plotted on a map.
The system has the following goals:
Every truck within the company is fitted with an SMS enabled GPS tracking device. These devices will send out SMS messages containing the trucks ID and it's location 4 times every hour.
The SMS Messaging server receives the SMS messages and a Trigger script parses the messages and stores them into the tracking database.
This database is also accessible through a web site. on this web site, GPS coordinates of the trucks are mapped in real-time on a Google Maps image.
![]() |
SMS messages format sent from truck to ActiveXperts SMS Messaging Server:
Message body (syntax): [truckid] [latitude] [longitude] Sample: 5 40.7069943037633 -74.009313583374 Explanation: Truck sends his identifier number and current latitude/longitude values
The system consists of the following:
The GPS Tracker database: GPS Coordinates.mdb
Trucks table:
Coordinates table
Triggers
A Trigger is called when a new message arrives in the system. GPS Tracking Project only accepts messages via SMS. Since GPS Tracking uses one incoming SMS number, one trigger is defined.
The GPS Coordinates.vbs trigger does the following:
Option Explicit
CONST STR_DATABASEFILE = "C:\\GPS Coordinates.mdb"
Dim g_objMessageDB, g_objConstants
' Creation of global objects
Set g_objConstants = CreateObject( "Axsms-messaging-server.Constants" )
Set g_objMessageDB = CreateObject( "Axsms-messaging-server.MessageDB" )
' // ========================================================================
' // Function: ProcessMessage
' // ------------------------------------------------------------------------
' // ProcessMessage trigger function to process incoming messages
' // ========================================================================
Function ProcessMessage( numMessageID )
Dim objMessageIn, objMessageOut
' Open the Message Database
g_objMessageDB.Open
If( g_objMessageDB.LastError <> 0 ) Then
Exit Function
End If
' Retrieve the message that has just been received. If it fails then exit script
Set objMessageIn = g_objMessageDB.FindFirstMessage( "ID = " & numMessageID )
If g_objMessageDB.LastError <> 0 Then
g_objMessageDB.Close
Exit Function
End If
' Change Status to from Pending to Success. If you don't do it, the message will
' be processed by subsequent triggers (if defined) because message is still
' pending
objMessageIn.StatusID = g_objConstants.MESSAGESTATUS_SUCCESS
g_objMessageDB.Save objMessageIn
SaveCoordinate ( objMessageIn )
' Close the Message Database
g_objMessageDB.Close
End Function
' // ========================================================================
' // ReplyMessage
' // ------------------------------------------------------------------------
' // Auto reply to every incoming SMS message
' // ========================================================================
Function SaveCoordinate( objMessageIn )
Dim objMessageOut
Dim strResponse
Dim strResult, strCall
Dim objConn
Dim RSResult
Dim nCount
Set objConn = CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & STR_DATABASEFILE & ";"
strResult = Split(objMessageIn.Body)
If (UBOUND(strResult) + 1 < 3) Then
Exit Function
End If
Set RSResult = objConn.Execute("SELECT TOP 1 * FROM Coordinates WHERE TruckID='" & _
strResult(0) & "' ORDER BY Callnr DESC")
if ( RSResult.EOF ) Then
strCall = 0
else
strCall = RSResult ("Callnr")
end if
strCall = strCall + 1
objConn.Execute "INSERT INTO Coordinates (TruckID,Latitude,Longitude,Callnr) VALUES ('" & _
strResult(0) & "','" & strResult(1) & "','" & strResult(2) & "'," & _
strCall & ")"
End Function