发布于 2026-01-06 3 阅读
0

AWS 位置服务:我的 AWS 社区构建者们在哪里?

AWS 位置服务:我的 AWS 社区构建者们在哪里?

简而言之:我使用 AWS Location Services 构建了一张 AWS 社区建设者地图。点击此处查看地图点击此处查看代码


我最近被AWS社区建设者项目录取,这个项目成员的地域分布之广让我印象深刻。虽然项目按技术领域划分成不同的小组——尽管这种划分非常松散,成员可以自由参加任何他们感兴趣的技术领域的讨论和课程——但并没有基于地理位置的分组。

这导致许多人提出了同样的问题:我附近还有其他 AWS 社区建设者吗?

该项目的经理Jason Dunn同意与我分享一些匿名的位置数据,我自愿绘制一个简单的概念验证地图来显示这些位置。

我最初是通过Google Maps JS API实现的代码可以在这里找到),但随着AWS Location Service 的发布,我决定值得尝试一下这项新服务。

什么是亚马逊定位服务?

Amazon Location Service是一套新的资源,用于支持地图和基于位置的使用场景,例如地理编码、路线规划、资产/设备跟踪和地理围栏事件。

截至撰写本文时,AWS Location Service 正式发布还不到两周。随着该服务不断发展完善,我期待未来必然会涌现出更多新功能和集成。

初步印象(地图和地理编码)

以下是我的初步印象。我目前只对地图和地理编码进行了简单的实验,以支持这个简单的用例。

路线规划、跟踪和地理围栏组件看起来非常有趣,但我还没有直接使用经验。

优点:与其他 AWS 服务集成良好

如果您已在使用 AWS 生态系统,那么使用 Amazon Location Services 将非常便捷,因为您可以继续使用您已在使用的工具和 SDK。您可以通过 IAM 控制访问权限和安全性,通过 CloudFormation 实现部署自动化,使用 CloudWatch 进行监控,通过 Amazon EventBridge 接收基于位置的事件通知等等。

优点:为各种位置提供商创建了一个抽象层。

亚马逊目前支持客户使用EsriHERE 的数据集和服务。创建亚马逊地图、地点等资源时,您可以选择数据提供商。每个提供商各有优劣,但现在您可以轻松切换,无需与每个不同的位置提供商 API 集成。随着新提供商的加入,您可以继续使用相同的界面。

优点:更好的隐私和安全

AWS无权出售您的数据或将其用于广告目的(谷歌能这么说吗?)。他们还会在将您的请求提交给供应商之前对其进行匿名化处理。所有跟踪和地理围栏数据都仅存储在您的AWS账户中(而非第三方账户),这使您可以控制和保护这些信息。

不太好:免费版/定价

AWS 提供免费套餐,但仅限 3 个月试用期。3 个月后,您需要根据实际使用情况付费。相比之下,谷歌地图的免费套餐(每月免费移动端使用和 200 美元地图额度)没有有效期,而且更加慷慨。虽然地图和地理编码的价格与其他服务相比具有竞争力,但亚马逊按图块收费,而许多其他服务商按地图加载次数收费。这意味着,如果您的用户频繁缩放和平移地图,您可能需要为亚马逊定位服务支付更多费用。

这种定价方式使得亚马逊位置服务对个人用户、小型原型开发项目以及对价格极其敏感的移动地图应用程序来说吸引力略有下降,因为你最终可能需要付费,而其他提供商(例如谷歌)的免费套餐则可以让你做更多的事情。

我希望亚马逊至少能为地图服务创建一个更长期的免费版本。

#### 不足之处:缺乏对匿名访问公共地图的访问控制。
亚马逊位置服务 (Amazon Location Services) 提供了一个 API,可以连接到其他地图库(例如MapLibreTangram)。这固然不错,但如果您想在公共网站上显示地图,则需要使用启用了匿名访问的 Cognito 身份池。他们的开发者指南对此有详细说明,但我感觉访问控制方面存在一些不足,因为无法像使用 Google API 密钥那样将匿名凭据锁定到特定的 IP 地址或 HTTP 引用页。这意味着有人可以从浏览器 JavaScript 源代码中获取 Cognito 身份池 ID,并将其用于自己的地图请求。这似乎是一个很大的缺陷,希望 IAM 策略能够添加一些额外的条件支持,以便更好地控制匿名访问。
有人给我指明了正确的方向,这是可以实现的:请查看我的文章,了解如何通过引用或 IP 地址锁定 AWS Location Service,类似于 Google Maps API 密钥。

创建地图并对数据进行地理编码

为了完成这个概念验证,我需要以下东西:

给定一个地点列表,我需要:1)对这些地点进行地理编码,获取它们的经纬度;2)创建一个静态地图网页,将这些地点显示为地图上的标记。如果还能为这些标记添加一些元数据,那就更好了。

地图

项目地图部分并没有太多创新,目标只是快速验证概念。我们按照AWS Location Service 开发人员指南的以下章节进行了操作,该指南是入门的绝佳资源!

我还参考了下面一些 MapLibre 教程来帮助创建地图上的标记、图标和弹出窗口:

地理编码过程

我们需要创建一个地点索引资源来支持地理编码。

为了进行地理编码并生成地图显示的 GeoJSON 数据,我编写了一个简单的 Python 脚本来实现这一目标。由于 boto3(即 Python AWS SDK)已经添加了地理编码功能,所以这项工作相当容易。

遗憾的是,我们掌握的亚马逊社区建设者的唯一位置信息是国家/地区。这导致生成了许多重复的标记,地图库对此并不满意。最终,我调整了地理编码脚本的逻辑,为每个国家/地区创建一个单独的点,然后为该点添加属性,以指示该国家/地区的人口数量。这样,当用户将鼠标悬停在地图标记上时,就可以在地图上弹出显示该成员数量属性。

最终结果

要查看最终代码和地理编码脚本,请查看 GitHub 上的 acbmap-aws 代码库。如果您想尝试在本地运行此代码,我已在 README 文件中添加了更多详细信息。

您可以在以下位置找到由 Amazon Location Services 提供支持的 AWS Community Builders 地图的托管​​版本:

https://acbmap.humbleg.com/aws/

文章来源:https://dev.to/aws-builders/aws-location-service-where-my-aws-community-builders-at-e02