亚马逊AWS官方博客

Amazon Location – 为应用程序添加地图和位置感知功能

我们希望能为大家提供更轻松、更经济的方式,以为 Web 和移动应用程序添加地图、位置感知以及其他基于位置的功能。在此之前,需要通过复杂且高成本的方法才能实现这一目标,而且需要与单个服务提供商的业务和编程模型绑定。

推出 Amazon Location Service
今天,我们推出了预览版的 Amazon Location,你可以立即开始使用。Amazon Location Service 采用十分经济的按使用量付费定价模式,你只需支付常见备选方案几分之一的价格,即可访问多家服务提供商提供的地图和基于位置的服务。

你可以使用Amazon Location Service 来构建能够感知位置并相应进行响应的应用程序。你可以显示地图、验证地址、执行地理编码(将地址转换为位置)、跟踪包裹和设备的移动等等。你可以轻松设置地理围栏并在跟踪的物品进入或离开地理围栏区域时收到通知,甚至可以在地图上叠加自己的数据,同时保留完全控制权。

你可以从 AWS 管理控制台AWS 命令行界面 (CLI) 或通过一组 API 来访问 Amazon Location Service,还可以使用 Mapbox GLTangram 等现有的地图库。

Amazon Location 详解
下面我们来看 Amazon Location Service 提供了哪些资源类型,然后将讨论如何在应用程序中使用这些资源。

地图Amazon Location Service 允许你创建将使用我们合作伙伴提供的数据的地图。你可以选择 EsriHERE Technologies 提供的地图和地图样式,未来我们可能支持这些合作伙伴和其他合作伙伴提供的更多地图和更多样式。创建地图后,你可以使用 GetMapTile 函数来检索地图瓦片(最高有 16 个缩放级别选择)。你不会直接执行此操作,而是会使用 Mapbox GL、Tangram 或其他库。

地点索引 – 你可以选择 Esri 和 HERE 提供的索引。这些索引支持 SearchPlaceIndexForPosition 函数,返回离你所提供位置最近的住宅地址或兴趣点(通常称为 POI)等地点,同时还会执行反向地理编码,以将位置(一对坐标)转化为一个易读的地址。这些索引还支持 SearchPlaceIndexForText 函数,使用地址、名称、城市或地区等自由格式文本来搜索地址、企业和兴趣点。

跟踪器 – 跟踪器通过 BatchUpdateDevicePosition 函数接收来自一个或多个设备的位置更新,并且可以查询设备当前位置 (GetDevicePosition) 或位置历史记录 (GetDevicePositionHistory)。跟踪器还可以链接到地理围栏集 (Geofence Collections),以监控设备进出地理围栏的情况。

地理围栏集 – 每地理围栏集都包含一个定义了地理边界的地理围栏列表。下面这个地理围栏(使用 geojson.io 创建)描绘了我附近的一个公园:

Amazon Location 的操作
我可以通过 AWS 管理控制台 来开始使用 Amazon Location,然后在必要时转用 AWS 命令行界面 (CLI) 或 API。我打开 Amazon Location Service 控制台,然后单击 Try it!(试用!)来创建一组入门资源,也可以通过左侧导航菜单逐个创建这些资源。我将逐个创建这些资源,然后点击 Maps(地图):

然后我点击 Create map(创建地图)继续:

我输入名称和描述:

然后我选择所需的地图并单击 Create map(创建地图):

地图已创建完毕,可立即添加到我的应用程序中:

现在我已经准备好将地图嵌入我的应用程序了,我有多种选择,包括 Amplify JavaScript 开发工具包、Amplify Android 开发工具包、Amplify iOS 开发工具包、Tangram 和 Mapbox GL(请参阅开发人员指南以了解有关每种选择的更多信息)。

然后我想跟踪设备的位置,以便在设备进出给定区域时收到通知。我使用 GeoJSON 编辑工具(例如 geojson.io)来创建一个多边形的地理围栏,然后保存(下载)生成的文件:

我单击左侧导航中的 Create geofence collection(创建地理围栏集),然后在第 1 步中添加我的 GeoJSON 文件,输入名称和描述,然后单击 Next(下一步):

现在我输入跟踪器的名称和描述,然后单击 Next(下一步)。此跟踪器将会链接到我刚刚创建的地理围栏集:

下一步是安排跟踪器,以将事件发送到 Amazon EventBridge,从而让我可以在 CloudWatch Logs 中进行监控。我将设置保持原样,然后单击 Next(下一步)继续:

我检查了我所有的选择,然后单击 Finalize(完成)以继续操作:

资源创建、设置完毕,可以开始使用:

然后我可以编写代码或使用 CLI 来更新设备的位置:

$ aws location batch-update-device-position \
   --tracker-name MyTracker1 \
   --updates "DeviceId=Jeff1,Position=-122.33805,47.62748,SampleTime=2020-11-05T02:59:07+0000"

这样操作一两次之后,我可以检索设备的位置历史记录:

$ aws location get-device-position-history \
  -tracker-name MyTracker1 --device-id Jeff1
------------------------------------------------
|           GetDevicePositionHistory           |
+----------------------------------------------+
||               DevicePositions              ||
|+---------------+----------------------------+|
||  DeviceId     |  Jeff1                     ||
||  ReceivedTime |  2020-11-05T02:59:17.246Z  ||
||  SampleTime   |  2020-11-05T02:59:07Z      ||
|+---------------+----------------------------+|
|||                 Position                 |||
||+------------------------------------------+||
|||  -122.33805                              |||
|||  47.62748                                |||
||+------------------------------------------+||
||               DevicePositions              ||
|+---------------+----------------------------+|
||  DeviceId     |  Jeff1                     ||
||  ReceivedTime |  2020-11-05T03:02:08.002Z  ||
||  SampleTime   |  2020-11-05T03:01:29Z      ||
|+---------------+----------------------------+|
|||                 Position                 |||
||+------------------------------------------+||
|||  -122.43805                              |||
|||  47.52748                                |||
||+------------------------------------------+||

我可以编写 Amazon EventBridge 规则来监控事件,然后使用这些事件来执行任何所需的处理。当设备进出地理围栏区域时,系统会发布事件,如下所示:

{
  "version": "0",
  "id": "7cb6afa8-cbf0-e1d9-e585-fd5169025ee0",
  "detail-type": "Location Geofence Event",
  "source": "aws.geo",
  "account": "123456789012",
  "time": "2020-11-05T02:59:17.246Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:geo:us-east-1:123456789012:geofence-collection/MyGeoFences1",
    "arn:aws:geo:us-east-1:123456789012:tracker/MyTracker1"
  ],
  "detail": {
        "EventType": "ENTER",
        "GeofenceId": "LakeUnionPark",
        "DeviceId": "Jeff1",
        "SampleTime": "2020-11-05T02:59:07Z",
        "Position": [-122.33805, 47.52748]
  }
}

最后,我可以创建和使用地点索引,以便处理地理对象。这次我会改用 CLI。我创建了索引:

$ aws location create-place-index \
  --index-name MyIndex1 --data-source Here

然后我通过查询它来查找位置附近的地址和兴趣点:

$ aws location search-place-index-for-position --index-name MyIndex1 \
  --position "[-122.33805,47.62748]" --output json \
  |  jq .Results[].Place.Label
"Terry Ave N, Seattle, WA 98109, United States"
"900 Westlake Ave N, Seattle, WA 98109-3523, United States"
"851 Terry Ave N, Seattle, WA 98109-4348, United States"
"860 Terry Ave N, Seattle, WA 98109-4330, United States"
"Seattle Fireboat Duwamish, 860 Terry Ave N, Seattle, WA 98109-4330, United States"
"824 Terry Ave N, Seattle, WA 98109-4330, United States"
"9th Ave N, Seattle, WA 98109, United States"
...

我也可以进行基于文本的搜索:

$ aws location search-place-index-for-text --index-name MyIndex1 \
  --text Coffee --bias-position "[-122.33805,47.62748]" \
  --output json | jq .Results[].Place.Label
"Mohai Cafe, 860 Terry Ave N, Seattle, WA 98109, United States"
"Starbucks, 1200 Westlake Ave N, Seattle, WA 98109, United States"
"Metropolitan Deli and Cafe, 903 Dexter Ave N, Seattle, WA 98109, United States"
"Top Pot Doughnuts, 590 Terry Ave N, Seattle, WA 98109, United States"
"Caffe Umbria, 1201 Westlake Ave N, Seattle, WA 98109, United States"
"Starbucks, 515 Westlake Ave N, Seattle, WA 98109, United States"
"Cafe 815 Mercer, 815 9th Ave N, Seattle, WA 98109, United States"
"Victrola Coffee Roasters, 500 Boren Ave N, Seattle, WA 98109, United States"
"Specialty's, 520 Terry Ave N, Seattle, WA 98109, United States"
...

这两种搜索都有其他选项;请参阅“地理编码”、“反向地理编码”和“搜索”部分以了解更多信息。

注意事项
Amazon Location 今天推出了预览版,你可以立即开始使用。在预览期间,我们计划增加一个用于路由的 API,同时也将尽最大努力响应客户的反馈和功能请求。

此服务采用按使用量定价的模式,初始评估期长达三个月,你可以免费多次调用 Amazon Location API。评估期结束后,你需要按 Amazon Location 定价页面上所列的价格付费。

Amazon Location 已在美国东部(弗吉尼亚北部)美国东部(俄亥俄)美国西部(俄勒冈)欧洲(爱尔兰)亚太地区(东京)区域推出。

Jeff