【问题标题】:Migrating google maps api app from fusion tables to datastore + data layer将 google maps api 应用程序从融合表迁移到数据存储 + 数据层
【发布时间】:2019-05-23 14:58:33
【问题描述】:

我正在计划从融合表迁移。我当前的实现(在 gae 上)有一个包含数百个位置的融合表,并通过谷歌地图 api 将其显示在融合表层上。位置过滤是通过在客户端的 javascript 中修改融合表查询来完成的。

我的计划是迁移到结合了谷歌地图数据层的谷歌应用引擎数据存储。但是我完全不知道如何实现数据的检索和显示,当用户浏览地图(缩放、平移)或应用过滤器时也是如此,因为这一切都由融合表层处理。

我是否应该查询仅在当前地图视图中可见的数据,并在用户转到其他视图时再次查询? (平移地图时,这将是很多查询)。或者我应该查询所有数据,即使它不在视野范围内? (看起来在实现上不那么麻烦,但当数据集增长时不可扩展)。

过滤怎么样。当用户应用过滤器时,我应该再次查询数据,还是在客户端实现过滤器并通过地图样式隐藏地图上的项目更好?

使用 geojson 格式将数据从服务器传输到客户端是否有意义,因此它可以用于填充数据层而无需进一步处理?

如果用户一直缩小会发生什么?然后我必须将完整的数据集传输到客户端并从那里返回到谷歌地图 api 进行渲染吗?这似乎也无法扩展?

有了融合表,这一切都得到了解决……现在有很多选择要做!?这种用例应该有某种通用方法,不是吗?

这是我的应用程序的屏幕截图,以显示所涉及的数据量(可以增长!)

【问题讨论】:

    标签: google-maps-api-3 google-cloud-datastore google-fusion-tables google-datalayer


    【解决方案1】:

    我也有类似的事情发生。对我来说,在 http 请求超时之前,单个数据存储查询和获取上限为几百条记录。所以这不能很好地处理你的“缩小”场景。

    另外需要注意的是,数据存储将无法同时对纬度和经度进行不等式过滤。 https://cloud.google.com/appengine/docs/standard/python/datastore/query-restrictions#inequality_filters_are_limited_to_at_most_one_property

    目前,我将大约 10k 点的整个列表作为 json 文件发布到谷歌云存储中,然后我的端点提供该缓存文件,而不是实际进行提取。 https://cloud.google.com/appengine/docs/standard/python/tools/webapp/blobstorehandlers#Using_with_GCS

    在客户端,我只是将整个内容输入到 google maps sdk。如果您启用诸如标记聚类之类的功能,则该地图的性能很好。 https://developers.google.com/maps/documentation/javascript/reference/marker#MarkerOptions.optimized https://developers.google.com/maps/documentation/javascript/marker-clustering

    【讨论】:

    • 缓存整个数据集对我来说会很困难,因为用户可以添加或修改数据,这会使整个缓存失效。但我现在正在考虑使用 geohash 位置属性。然后我可以进行平铺以将查询拆分到避免超时并可能缓存单个图块的级别。待续……
    猜你喜欢
    • 2015-01-12
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多