Gestur - 健康护理解决方案
具有 GPS 和 NFC 功能的 Windows 应用商店解决方案。

免责声明
这是 jmgleiser 和 Enrique Albert 联合撰写的文章。JMGleiser 提出了项目的原始构想,并负责项目的需求和文档方面的工作;Enrique Albert 负责项目的技术和开发方面的工作。
引言
此应用程序已提交至 2013 年英特尔® 应用创新大赛 的“**医疗保健**”类别下的“平板电脑”应用程序竞赛。
政府卫生部门和私营机构都在努力鼓励患者在家中接受治疗,而不是占用相对昂贵的医院床位或类似设施。因此,居家健康服务提供商在当今非常普遍。Gestur 应用程序可帮助护理人员和提供者管理访视,方便患者信息以及通过 NFC 技术进行签到/签出,从而监控护理人员是否完成日常访视。
Gestur 是冰岛语中“访客”的意思,该应用程序的主要功能是为护理人员和提供服务的公司提供价值。对于护理人员,该解决方案管理预定的访视,并帮助护理人员找到患者的家庭住址,确保护理人员能够以简便的方式获取最新的患者详细信息、注意事项和其他医疗通知。对于服务提供商,该解决方案管理预定的访视,并确保以无缝的方式将通知发送给护理人员,系统会自动创建访视的签入和签出记录,以便提供者能够确保护理人员确实在约定的时间内到达患者的所在地。
文章目录
本文包含以下章节
应用程序描述
Gestur 应用程序的典型用户是医疗保健护理人员,该应用程序部署在平板电脑上以便于移动。应用程序维护一个计划访视列表,通过向护理人员的平板电脑发送通知消息,该列表会自动与后端系统同步。访视记录包括患者、访视地点、预约日期/时间以及商定的持续时间等详细信息。其中还包含有助于护理人员在访视期间的注意事项。在可用的详细信息类型中,可以为患者记录添加图片。
护理人员可以轻松生成当天的访视列表,每个访视都包含地理位置信息,因此利用平板电脑的 GPS 功能,应用程序可以生成方向和路线详细信息。Gestur 应用程序使用 Bing Maps 集成来显示访视地点以及从护理人员当前位置到该地点的路线。
当护理人员到达患者家时,患者会随身携带一个 NFC 标签,用于签到。离开时也使用同一个标签进行签出。通过这种方式,系统可以有效地自动监控护理人员的访视。通过这种方式,医疗保健提供者可以在护理人员不产生额外工作的情况下记录服务时间。NFC 标签代表近场通信,它已成为智能手机的标准一段时间,但该技术最近才添加到 Windows 8 设备中,以便 Gestur 等应用程序能够从中受益。这些标签相对便宜,并且可以以不同的方式进行编程。对于 Gestur 应用程序,标签包含足够的患者详细信息来验证签到过程。
请参阅本文下方关于NFC 技术的部分。
此外,在访视期间,护理人员可以输入书面笔记并捕捉图像,这些图像有助于后续的医疗评估或护理人员的后续访视。
最后但同样重要的是,Gestur 使用 toast 和推送通知来确保应用程序始终与后端系统同步。通过这种方式,护理人员几乎可以实时地获取访视更新和其他通知。
Gestur 解决方案包含以下两个主要应用程序:
- 云端后端系统
- 平板电脑护理客户端应用程序

后端系统
Gestur 解决方案的后端系统包含一组部署在 Azure 平台上的服务和组件,提供以下功能:
- 患者详细信息
- 预定访视
- 护理人员详细信息
- 护理人员订阅和推送通知
特别是,以下组件需要部署在 Azure 上:
- Gestur 数据库:Azure SQL
- Gestur REST 服务:Azure 网站
- 推送通知服务:Azure Mobile Services
平板电脑客户端应用程序
Gestur 应用程序是一款 Windows 应用商店应用,可在任何 Windows 8 设备上运行,包括 Windows RT 平板电脑。该应用程序提供护理人员管理居家患者日常预定访视所需的所有信息。该应用程序包含易于使用的屏幕和放大的控件,通过这种方式,所有功能都可以通过平板电脑的触摸屏进行调用。此外,屏幕和功能之间的导航也非常直观,因此几乎不需要培训即可开始使用该应用程序。
该应用程序由一个主屏幕组成,该屏幕形似仪表板,应用程序在此显示当日的预定访视。如果选择了一个访视,系统会在 Bing 地图控件上显示方向和路线详细信息,该控件使用护理人员平板电脑的当前 GPS 坐标以及访视详情中提供的患者家庭住址坐标。此外,一旦选择了一个访视,患者详细信息将显示在右侧面板上。
护理人员可以根据需要为特定访视输入笔记和其他医疗详细信息,这些信息会自动存储在后端系统中,并且可以在稍后需要时供其他 Gestur 用户访问。当护理人员到达患者家时,患者会出示一个 NFC 标签用于签到。在护理人员离开之前,会执行相同的过程进行签出。签入和签出详细信息也会发送到后端系统,用于管理和访视管理。
客户端应用程序会自动接收通知,并使用 Windows 8 应用程序的 toast 通知机制来提醒护理人员未处理的消息和访视更新。通过这种方式,系统可以自动更新预定访视,或者用于发送特定访视的附加详细信息,确保护理人员始终保持知情状态。
Gestur 客户端应用程序使用 C# 开发,并结合 WPF 和 XAML 框架,适用于 Windows 8 应用商店应用。
NFC 技术
微软在一段时间前已将 NFC 添加到 Windows Phone 中,现在它已在 Windows 8 中可用。获得这类技术的使用权使得开发全新的一系列应用程序成为可能。Gestur 就是其中之一,患者将携带解码的 NFC 标签,在护理人员拜访时用于签到/签出。这些标签易于编程,而且非常轻便且相对便宜。

遗憾的是,英特尔和联想表示,本次竞赛提供的设备将不包含此技术。因此,我们决定使用如下所示的 USB 读写器。

在实际场景中,标签读取器将集成到平板电脑中,护理人员只需将 NFC 标签靠近平板电脑即可读取。
Bing Maps 集成
我们设想将 Bing Maps 集成到 Gestur 客户端应用程序中。在 Windows 应用商店应用中集成 Bing Maps 相对简单。对于 Gestur 应用程序,当护理人员选择一个访视时,系统将调用 Bing Maps REST 方法,使用平板电脑的当前坐标以及访视详情中提供的坐标。然后,Bing Maps 服务会返回路线详细信息,并渲染一张地图,以便护理人员能够确定到达患者家的最佳路线。
为了提供此类功能,将提供一个名为 MapServices
的服务类,它只公开一个公共方法,该方法需要传入一个 VisitSummary
实例。该类会委托给一个名为 SetRoute
的私有方法。
private async void SetRoute(Location startLocation, Location endLocation)
{
ClearMap();
//Create the Request URL for the routing service
01
const string request = @"http://dev.virtualearth.net/REST/V1/Routes/Driving?o=json&wp.0={0},{1}&wp.1={2},{3}&rpo=Points&key={4}";
var routeRequest =
new Uri(string.Format(request, startLocation.Latitude, startLocation.Longitude, endLocation.Latitude,
endLocation.Longitude, _mapTrucks.Credentials));
//Make a request and get the response
02 var r = await GetResponse(routeRequest);
if (r != null &&
r.ResourceSets != null &&
r.ResourceSets.Length > 0 &&
r.ResourceSets[0].Resources != null &&
r.ResourceSets[0].Resources.Length > 0)
{
var route = r.ResourceSets[0].Resources[0] as Route;
if (route == null) return;
//Get the route line data
var routePath = route.RoutePath.Line.Coordinates;
var locations = new LocationCollection();
foreach (var t in routePath)
{
if (t.Length >= 2)
{
locations.Add(new Location(t[0], t[1]));
}
}
//Create a MapPolyline of the route and add it to the map
var routeLine = new MapPolyline
{
Color = Colors.Blue,
Locations = locations,
Width = 5
};
_routeLayer.Shapes.Add(routeLine);
//Add start and end pushpins
var start = new Pushpin
{
Text = "S",
Background = new SolidColorBrush(Colors.Green)
};
_mapVisits.Children.Add(start);
MapLayer.SetPosition(start,
new Location(route.RouteLegs[0].ActualStart.Coordinates[0],
route.RouteLegs[0].ActualStart.Coordinates[1]));
var end = new Pushpin
{
Text = "E",
Background = new SolidColorBrush(Colors.Red)
};
_mapVisits.Children.Add(end);
MapLayer.SetPosition(end,
new Location(route.RouteLegs[0].ActualEnd.Coordinates[0],
route.RouteLegs[0].ActualEnd.Coordinates[1]));
//Set the map view for the locations
var locationRect = new LocationRect(locations);
03 locationRect.Width += 0.5; locationRect.Height += 0.5;
_mapVisits.SetView(locationRect);
}
}
关于上述代码,有几点值得注意。在第 01 行和第 02 行,URI 被设置为调用 Bing Maps 中的 REST 方法来计算路线。第 3 行是一种简单的方法,可以确保 Bing Map 窗口提供一些边距,以便起点和终点稍微位于窗口内,而不是在其边界之外。
下面是用于从访视详情渲染 Bing Map 控件的公共方法:
public void RefreshMap(VisitSummary selectedItem)
{
var location = new Location(selectedItem.Latitude, selectedItem.Longitude);
if (location.Latitude == 0 && location.Longitude == 0) return;
SetRoute(location, GetTableCoordinates());
var image = new Image
{
Source = new BitmapImage(new Uri(_baseUri, "/images/carer_pin.png")),
Width = 40,
Height = 40
};
MapLayer.SetPosition(image, location);
_mapVisits.SetView(location);
_mapVisits.Children.Add(image);
}
SetRoute
私有辅助方法可能是最值得讨论的方面。它接收起点和终点位置,并在屏幕地图上绘制路线。此操作是异步的,因此不会阻塞,结果是访视详情通常会在路线显示在 UI 之前渲染。计算路线可能是一项昂贵的操作,因此尽快渲染其他访视详情是提供更具响应性的用户界面的一个好技巧。
历史
- 2013 年 8 月 12 日 - 文章撰写完成。