在网络工作者中使用谷歌地图对象



情况:在制作谷歌地图的页面的主线程中,有太多的东西在运行,这些地图覆盖了来自美国人口普查数据的ZIP地区,以及客户要求将地区分组为谨慎的组的东西。虽然台式机上没有重大问题,但移动设备(iPad)认为线程占用的时间太长(数据返回后最多6秒),因此肯定已经崩溃。

解决方案:将循环函数从每一行中收集形状的点卸载到网络工作者,该网络工作者可以在移动设备上以资源允许的速度或速度工作。(三个用于循环,第一个用于选择行,第二个用于选择列,第三个用于列中的每个点。执行时间:对于2000多个具有多个点的行,总共3-6秒)

问题:为了使这一点正确有效,必须在web工作程序中将点做成一个形状(多边形)。然而,由于它是一个由google.maps.latling对象组成的google.maps.polygon对象,因此[网络工作者]需要了解这些项目在网络工作者中的内容。Web工作人员要求您不要使用窗口或DOM,因此它必须导入脚本,目的是将对象作为JSON编码项传递回。由于这些项依赖于window元素,即使使用importScript(),代码也无法引用任何google对象。

更复杂的是:谷歌的API在技术上是专有的。这是针对的网络应用程序代码受NDA约束,因此可以提出有针对性的问题,但不能复制/粘贴所有代码。

解决方案/任何模糊的想法:???

TLDR:需要访问google.maps.latling对象,并在web工作者中(最低限度)创建的新实例。Web工作者应该返回准备好弹出到google.maps.polygon对象中的对象,或者应该返回google.maps/polygon目标。如果由于需要窗口对象的问题而无法使用导入脚本的默认方法,我如何引用google地图API?

UPDATE:自从写这篇文章以来,我设法将大部分繁重的工作从主线程卸载到web工作程序,使其能够异步解析数据,并将数据分配给定制的latlng对象。

现在的问题是获取返回值,以便在正确的上下文中运行函数,以查看自定义lating是否足以让google.maps.polygon发挥其魔力。

从调用web工作程序并侦听其响应的文件中摘录(Coffeescription)

@shapeWorker.onmessage= (event)->
console.log "--------------------TESTING---------------"
data=JSON.parse(event.data)
console.log data
@generateShapes(data.poly,data.center,data.zipNum)

出于某种原因,它试图在web工作者的上下文中评估GenerateShapes,而不是在其所在的类的上下文中。

这又是一次发生了太多事情的复杂性。由于使用了->而不是=>,该作用域受到了限制,因为=>扩展了作用域以允许父类函数。

显然,问题在于这个网络应用程序需要运行的iOS版本,以及存储空间设置得任意低(是以前的十分之一)的错误。随着数据的缩小和iOS版本的修复,我能够在不使用网络工作者的情况下运行它。总有一天,我可能会和网络工作者一起回来提高效率。

最新更新