65.9K
CodeProject 正在变化。 阅读更多。
Home

全球定位设备软件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.84/5 (16投票s)

2012年12月4日

CPOL

2分钟阅读

viewsIcon

50204

downloadIcon

4418

一个基于C#的应用,用于追踪GPS设备的位置。

引言

我们需要开发一个应用程序,能够在C# .NET软件中,在地图上绘制放置在车辆或集装箱等物体上的设备在给定时间和日期范围内的位置。

背景

我们来自巴基斯坦卡拉奇IIEE的工业电子工程专业。这个项目的想法源于我们参观一个电子项目展览,在那里我们看到一个项目使用GPS模块在LCD上显示纬度和经度。这激励我们构建一个便携式/无线设备,它可以连接一个手机来记录其GPS坐标。我们开始着手这个项目,但随着考试临近,我们尊敬的Sajid Hussain 先生 让我们开发一个使用C#的软件。正是在这里,我们的项目真正成型。我们决定将我们的C#项目与GPS项目合并,以创建一个能够检测和绘制GPS设备位置的软件。Sajid Hussain 先生建议我们在其中包含一个GSM模块,以便将设备的位置更新到Web服务器,我们的软件从服务器获取数据并在地图上绘制。该软件可以定制用于多个设备。

代码

这个项目的代码可以分为三个部分。

  1. GMAP.NET。
  2. HTTP Web 请求 (System.NET)。
  3. XCoolForms for Windows (附加功能)。

GMAP.NET

该代码使用GMap.NET.dllGMap.NET.WindowsForms.dll 将控件添加到 XCoolForms,并且使用起来非常简单。首先,需要使用以下方式初始化 GMapControls

gMapControl1.SetCurrentPositionByKeywords("Pakistan"); // The country to be focused after map is loaded
gMapControl1.gMapProvider = GMapProviders.GoogleMap;// The map provider
gMapControl1.MapScaleInfoEnabled = true;
gMapControl1.ForceDoubleBuffer = true;
gMapControl1.RoutesEnabled = true;// Map can have Routes
gMapControl1.MinZoom = 2;     // Minimum zoom level
gMapControl1.MaxZoom = 26;    // Maximum zoom level
gMapControl1.Zoom = 10;       // Initial zoom level
gMapControl1.DragButton = MouseButtons.Left;// Mouse button used for dragging the map

在地图上放置标记

GMapOverlay myOverlay1 = new GMapOverlay(gMapControl1,"myOverlay1"); //Constructing object for Overlay
myOverlay1.Markers.Add(new gMap.NET.WindowsForms.Markers.GMapMarkerGoogleGreen(
   new PointLatLng(latitude,longitude)));//Adding a new Marker in the Overlay 
gMapControl1.Overlays.Add(myOverlay1);// Adding myOverlay1 to the Control

从服务器获取数据

以下请求将从GPS设备存储在服务器上的数据返回,并将其保存为字符串。

WebRequest request = WebRequest.Create("http://www.Abc......");// If required by the server, set the credentials.
request.Credentials = CredentialCache.DefaultCredentials;// Get the response.
WebResponse response = request.GetResponse();// Display the status.
Console.WriteLine(((HttpWebResponse)response).StatusDescription);// Get the stream containing content returned by the server.
Stream dataStream = response.GetResponseStream();// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);// Read the content. 
string responseFromServer = reader.ReadLine();// Display the content. 

在地图上绘制路线

GMapOverlay routes = new GMapOverlay(gMapControl1, "routes");// Constructing object for Overlay
gMapControl1.Overlays.Add(routes);
List<PointLatLng> list = new List<PointLatLng>(); // The list of Coordinates to be plotted
list.Add(new PointLatLng(32.710525233333,51.709773683333));
list.Add(new PointLatLng(32.711725983333,51.704725066667)); 
.
.
.
.
list.Add(new PointLatLng(32.713785566667,51.66982365));
GMapRoute r = new GMapRoute(list, "myroute"); // object for routing
r.Stroke.Width = 5;
r.Stroke.Color = Color.Red;
routes.Routes.Add(r);
gMapControl1.ZoomAndCenterRoute(r);
gMapControl1.Zoom = 15;

工具提示

为了显示指针的相关信息,我们需要为其添加工具提示功能。可以使用以下代码段添加它

GMapOverlay myOverlay1 = new GMapOverlay(gMapControl1, "myOverlay1");   
GMapMarkerGoogleGreen CurrentMarker;
CurrentMarker = new GMap.NET.WindowsForms.Markers.GMapMarkerGoogleGreen(new PointLatLng(latitude, longitude));
CurrentMarker.ToolTipMode = MarkerTooltipMode.OnMouseOver;
CurrentMarker.ToolTipText = "Your Text Here!";
myOverlay1.Markers.Add(CurrentMarker);
gMapControl1.Overlays.Add(myOverlay1);

附加功能

XCoolForms

虽然这并非必需,但我们希望为我们单调乏味的窗体添加一些色彩,因此我们决定在项目中添加 XCoolForms for Windows,我们从 https://codeproject.org.cn/Articles/33716/Fancy-Windows-Forms 获取。这并不是我们项目的主要部分,我们只是想添加一些颜色,可以在给定的链接中找到此功能的代码和解释。

自定义标记

作为附加功能,我们还在地图中添加了自定义标记,例如红色圆点、蓝色圆点和箭头。为此,我们从 https://codeproject.org.cn/Articles/32643/GMap-NET-Great-Maps-for-Windows-Forms-and-Presenta 获取了一个自定义标记类。

兴趣点

我们制作的设备只要GSM供应商的信号强度保持,就可以在任何地方工作。

© . All rights reserved.