精确定位您的确切位置并向世界展示您在哪里






4.66/5 (29投票s)
使用 2.0 框架进行地理定位 C# 智能客户端应用程序
引言
我有三个问题困扰了我很久。第一,“智能客户端”的呼声越来越高,占据了技术排行榜的显要位置,我想更好地理解这个新范式。第二,我需要开始学习 .NET 2.0 框架的所有新功能。第三,我的手机快没电了,我真的很需要一个能用的。
参加 CodeProject 智能客户端竞赛
我正在利用这个比赛来解决这三个问题。首要任务是理解智能客户端应用程序的本质。一个扎实的定义是智能客户端架构和设计选择的基础。
MSDN 对智能客户端的定义如下:
“智能客户端是易于部署和管理的客户端应用程序,通过利用本地资源并智能地连接到分布式数据源,提供自适应、响应迅速且丰富的交互式体验。”
这是我将在本文中遵循的定义,也是此应用程序的构建基础。您可以在此处阅读以获得全面的解释。
任务
在我们开始之前,您可以随时查看 http://www.tylerbrinks.com/pinpoint 以了解此应用程序的最终效果。现在,言归正传。
Google 最近向开发者开放了其地图 API。我发现将智能客户端应用程序与 Google 地图结合起来会很有趣。该应用程序的构想是允许用户输入约会(类似于 Outlook),但要包含约会地点的地址或交叉路口。然后,可以使用 Google 的地图服务映射该约会。问题在于,Google 的地图 API 需要纬度和经度值来生成地图,并且它们没有地理编码服务来将地址转换为纬度和经度。
解决方案
作为我们智能客户端定义的一部分,能够连接到分布式数据源。我依赖 http://www.geocoder.us/ 网站服务将地址转换为所需的纬度和经度值。然后,我使用自定义构建的网站服务将计划的约会和经纬度值保存到服务器。该服务器还托管了一个网站,允许任何人查看所有计划的约会,并查看约会实际所在位置的地图。换句话说,您创建约会,任何人都可以看到您随时所在位置的地图或卫星图像!
步骤 1:地理编码
地理编码是将地址(
步骤 2:调度
我们的智能客户端定义要求提供丰富的 UI。此应用程序允许您创建与地址关联的类似 Outlook 的约会。当您创建新约会时,您会输入约会的日期、时间和地点。在保存约会之前,您必须验证地址。该过程使用步骤 1 获取约会的纬度和经度。遵循我们的智能客户端定义,该应用程序使用丰富的 UI 来管理约会的调度。此步骤采用 WinForms 应用程序的形式,具有非常丰富的“Outlook 风格”UI。
步骤 3:数据持久化 – 在线和离线
我们的智能客户端定义说我们需要利用本地和远程资源。为了保持与我们定义的兼容性,该应用程序使用 Microsoft Online Application Block 来确定应用程序是在线还是离线。
当应用程序在线时,所有约会都通过自定义网站服务从服务器加载并保存到服务器。该网站服务接受并返回一个强类型数据集,其中包含约会日程和经纬度数据,并将数据存储在 SQL 数据库中。
当应用程序离线时,所有约会都从每个用户应用程序目录中的 XML 文档加载并存储(多个用户可以在同一台计算机上使用该应用程序)。然后,当应用程序再次在线时,所有本地保存的约会都会发送到远程服务器。
步骤 4:映射 – 乐趣所在
在步骤 3 中,数据通过网站服务发送到 SQL 数据库。现在,通过 ASP.NET 网站,数据可供全世界使用。当您注册使用 Google 的地图 API 时,您会获得一个密钥和一个示例 JavaScript。我正在使用 SQL 数据库中保存的约会的纬度和经度值来动态生成所需的映射脚本。在脚本中,我指示地图 API 以给定位置为中心,在该位置添加一个图钉图标,并添加一个显示地址的弹出叠加层。我还使用了扩展的地图选项,以便用户可以在地图和卫星视图之间切换。这意味着您可以看到您在每个约会中所处的实际建筑!(看看我现在在哪里!)
结束?
就是这样!它拥有丰富的 UI,智能地连接到 2 个远程数据源,利用本地和远程资源……它是一个智能客户端!
下一步呢?可以添加很多功能,例如从 Outlook 导入约会、为地图添加距离或行程方向等。目前,您有一个 .NET 2.0 智能客户端可以玩,并且可以为您自己的网站添加映射功能。
至于我——如果这个应用程序足够好,能够获得 3 部奖品手机中的一部,我一定会写一个小型智能手机应用程序,将手机的位置传输到我的服务器,以实现实时映射!