我建造的
varmomapo 是一个无服务器的Web应用程序,使用MongoDB地图集根据OpenStreetMap数据显示热图。
类别提交:
- 在JS框外思考
- Google Cloud Superstar
应用链接
屏幕截图
酒吧和其他饮料的地方,在法国戛纳附近
我附近的餐馆,手机上
西欧北部的风力涡轮机
描述
varmomapo 由4个主要部分组成:
- 一个Web应用程序,可在台式机或移动设备上使用,以根据OpenStreetMap数据显示加热地图。有多层可用:餐馆,酒吧,游乐场,...可以找到当地信息。使用Leaflet和Bootstrap Frameworks。
- 后端,计算和提供瓷砖热图。这是通过Google Cloud Build构建的GO应用程序,并通过Google Cloud Run执行。它连接到托管在同一GCP区域的MongoDB地图集,以检索要显示的功能。
- 一个数据存储,托管在MongoDB Atlas中。使用了两个集合:一个用于所有OpenStreetMap项目(存储为Geojson功能),一个用于缓存最多的瓷砖。它使用geospatial indexes来确保表现出色。
- 用GO编写的工具将来自OpenStreetMap Protobuf文件的数据导入到MongoDB数据存储中。
链接到源代码
https://github.com/xdbsoft/varmomapo
允许许可证
背景
我是2个小女孩的快乐父亲。他们真的很喜欢去游乐场。我知道我们自己地区的几个,但是一旦我们旅行,我就不知道在哪里可以找到它们。
热图非常适合可视化数据,并具有精确数据的全局视图。这是 varmomapo 发起的地方。
然后,一旦拥有数据,就可以生成这样的地图和扩展基础架构的代码,显示出不错的事物,例如旅游信息(餐厅,酒店,艺术品)或能源基础设施(风!涡轮机,核反应堆)。可能性是无限的。
我如何建造它
导入数据
我构建的第一部分是导入数据的工具。我选择了GO并使用官方的MongoDB驱动程序连接到Atlas数据存储。
我导入的第一个数据集是摩纳哥提取物。由于它是一个非常小的(少于10000个对象),因此每次都很容易迭代,丢弃和重新创建数据库。然后,我搬到了法国地区之一的更大数据集。我通过使用批量导入改进了工具。我当地的互联网带宽使我能够在20分钟内导入25万个功能。
但这不会扩展到法国或全球。查看MongoDB Atlas中的集群指标,问题不在那一边,因此绝对是我的网络。
我决定在Google Cloud平台中产生VM,并从那里启动数据导入。由于该工具是用我本地Windows笔记本电脑到Linux OS编译的GO交叉编写的,这只是一个单个环境变量(set GOOS=linux
)。将二进制上传到托管VM的云,性能大大提高。那时,我从一个自由集群转换为较大的群集,以便能够导入整个星球(大约有400万个小时进口的功能)。
使用MongoDB Atlas等托管服务有助于快速构建。自由群集允许实验,然后切换到更适合生产工作量的情况。更重要的是,自动缩放功能在正确的时间弹出,以启用完整行星文件的导入,并在导入后几个小时缩放。此外,Atlas接口有助于探索数据,甚至可以通过MongoDB Atlas Charts提供给定查询的热图的预览。
查询和服务热图瓷砖
第二个方面是实施后端。为了简化UI中的集成,我决定实施Tile Map Service,该服务器基本上是一个给定缩放级别的服务器,并且瓷砖的坐标必须为该区域提供PNG。
我已经知道一些软件包可以从OpenStreetMap Protobuf格式和地理空间方面读取。我带了官方的MongoDB客户端去与数据存储进行互相交流。我还找到了一个包装,可以生成热图,将其分叉并将所有物品粘合在一起。为了能够编写使用MongoDB驱动程序的正确的GO代码。我首先尝试了MongoDB Atlas Web界面中的查询,并从此处导出了代码。一旦我理解了使用bson.D
数据类型构建过滤器的逻辑(多亏了示例),我就可以自己编写它们。
使用小的“摩纳哥”数据集,性能很好,但是我不得不为较大的数据集添加2dsphere compound indexes。
多亏了Google Cloud Build和Google Cloud Run,我能够在本地环境中运行完全相同的代码并在生产中部署。此外,由于构建包装标准化,存储库不包含与部署相关的任何内容。在Google Cloud Console中单击几下,允许定义CI/CD管道,并从云中获得可执行的服务请求。使用SSL的自定义域设置还有另外几下单击。
其他资源/信息
- OpenStreetMap,作为可重复使用的地理空间数据的最佳来源
- MongoDB Go driver guide
- Quickstart to deploy a Go service to Cloud Run
- github.com/paulmach/osm:一个GO包,用于阅读和转换OpenStreetMap PBF格式。
- github.com/dustin/go-heatmap:一个生成热图的GO包