2013-10-28 52 views
1

通常我喜欢潜伏答案的论坛,但我无法找到一个所以这里去...自动上传GPS位置

我有我在写ASP为客户定制的车队管理系统,他们已经要求GPS功能,以便他们可以摆脱每月的卫星服务。我为卡车驾驶室中的笔记本电脑购买了一系列GPS加密狗,并为卡车司机的笔记本电脑编写了一个简短的Windows服务来读取和翻译数据。目前,我每10秒用翻译的位置覆盖一个文本文件。 (这样做的原因是Google API显然无法识别Windows 7中的外部位置传感器。)

但是,现在我需要将该信息传递给服务器,以便可以使用位置更新调度程序,并且以便卡车司机和其他司机可能不得不掩盖其路线的客户的位置贴在客户身上。我想我将不得不使用JavaScript,但希望有人能够让我朝着正确的方向发展。我试图预填充值转换成HTML文件上传控件,但显然是行不通

或者我可以保存Internet临时文件的文件,并通过ASP抓住它?使用套接字推送到服务器会更好吗?我想我纳入已经写的网站...

我不需要任何代码,我只需要在正确的方向得到尖!

谢谢!

+1

您使用哪种语言来创建文本文件?也许,不是创建该文件,而是通过REST Web服务直接将数据推送到服务器。 – dmarucco

+0

我使用VB,但我可以很容易地用C#重写它。然后,问题就变成了如何确定哪台机器发送了位置,以及如何与登录到该Web应用的用户相对应,因为我不认为我可以通过互联网读取MAC地址。不过我会看看REST。 – Larson

+0

其实dmarucco我用xml做的稍微不同,但你的建议是什么促使了这个想法。下班后我会发布我的解决方案。谢谢! – Larson

回答

0

好吧,明白了。感谢dmarruco建议REST,它激励我使用类似xml的解决方案。客户端如下:

Imports System.IO 
Imports System.IO.Ports 
Imports System.Text 
Imports System.Xml 
Imports System.Web 
Imports System.Net 


Module Module1 

Sub Main() 
    Dim myport As SerialPort = New SerialPort("COM3", "4800", Parity.None, 8, StopBits.One) 
    Dim availableSerialPorts As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Computer.Ports.SerialPortNames 
    If availableSerialPorts.Contains("COM3") Then 
     Dim dstring As String = "" 
     Try 
      If myport.IsOpen Then 
       myport.Close() 
      End If 
      myport.Open() 
      System.Threading.Thread.Sleep(1500) 
      Dim datastring As String = myport.ReadExisting 
      dstring += datastring 
      myport.Close() 
     Catch ex As Exception 
      MsgBox(ex.ToString) 
     Finally 
      If myport IsNot Nothing Then 
       myport.Close() 
      End If 
     End Try 

     Dim loc As Integer 
     Dim search As String = "$GPGGA" 
     loc = InStr(1, dstring, search, CompareMethod.Text) 

     Dim latstart As Integer = loc + 18 
     Dim lonstart As Integer = loc + 30 
     Dim lat As String = Mid(dstring, latstart, 9) 
     Dim lon As String = Mid(dstring, lonstart, 10) 
     Dim gpgga As String = Mid(dstring, loc, 50) 

     If Left(lat, 1) <> "," And Left(lon, 1) <> "?" Then 

      Dim HH As String = Left(lat, 2) 
      Dim mmmm As String = Mid(lat, 3, 7) 
      Dim mconv As String = Val(mmmm)/60 
      mconv = mconv.Replace("0.", "") 
      Dim latcoord As String = HH & "." & mconv 
      Dim lH As String = Left(lon, 3) 
      Dim lmm As String = Mid(lon, 4, 7) 
      Dim lmC As String = Val(lmm)/60 
      lmC = lmC.Replace("0.", "") 
      Dim loncoord As String = "-" & lH & "." & lmC 
      Dim xmldoc As New XmlDocument 
      Dim xmldec = xmldoc.CreateXmlDeclaration("1.0", "ASCII", "") 
      Dim outx As XmlElement 
      outx = xmldoc.CreateElement("Location") 
      xmldoc.AppendChild(outx) 
      Dim root As XmlElement = xmldoc.DocumentElement 
      xmldoc.InsertBefore(xmldec, root) 
      Dim xmlat As XmlElement 
      xmlat = xmldoc.CreateElement("lat") 
      xmlat.InnerText = latcoord 
      outx.AppendChild(xmlat) 

      Dim xmlon As XmlElement 
      xmlon = xmldoc.CreateElement("lon") 
      xmlon.InnerText = loncoord 
      outx.AppendChild(xmlon) 
      Dim machineid As String = "1" 'arbitrary for testing purposes 
      Dim xmach As XmlElement 
      xmach = xmldoc.CreateElement("MID") 
      xmach.InnerText = machineid 
      outx.AppendChild(xmach) 

      Dim url As String = "http://fakeurl.com/getxml.aspx" 'the receiving page goes here 
      Dim wreq As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest) 
      Dim encoding As New ASCIIEncoding() 
      Dim bytestowrite As Byte() = encoding.GetBytes(xmldoc.ToString) 
      wreq.Method = "POST" 
      wreq.ContentLength = bytestowrite.Length 
      wreq.ContentType = "text/xml" 
      Dim mystream As Stream = wreq.GetRequestStream() 
      mystream.Write(bytestowrite, 0, bytestowrite.Length) 
      mystream.Close() 

     Else 
      MsgBox("No Fix") 
     End If 
    Else 
     MsgBox("Disconnected") 
    End If 
End Sub 

End Module 

原谅try/catch这是我发布它之前的测试代码。