在我的应用程序中,用户可以滚动Google地图,查看使用Google Maps API放置在地图上的各种标记和其他数据。每当用户发出dragend
事件时,我向我的服务器发送一个请求,向其传递地图中心的当前纬度/经度,以及半径值。我的服务器获取这些lat,lng和radius值并查询数据库以查看是否有任何相关对象应该在地图上显示。如果有,它们将返回到浏览器,并在地图上呈现。
我试图避免每次用户拖动地图时都调用我的服务器。基本上,如果将要进行的呼叫不包括任何新点,则不应进行呼叫。
我试图直观地展示我在下图中的含义:
填充的蓝色圆圈表示由于用户将地图定位在每个圆圈的中心而已经查询过的区域。当他们这样做时,会对服务器进行调用,并返回填充蓝色圆圈所覆盖区域的数据。
当他们在地图上拖动时,所有这些蓝色区域的并集表示已从服务器检索数据的位置。现在,小红圈代表一个位置,如果用户要定位地图,我不想要调用服务器来加载新数据。那是因为已经检索到由该中心点和半径构成的整个区域;它已经是蓝色区域的一部分。
另一方面,绿色位置表示我 想要调用服务器来获取数据的位置,因为由中心点和半径构成的某些区域不属于蓝色区域。
我想知道是否有人有任何方法可以解决这个问题。这让我很难过。
答案 0 :(得分:1)
解决方案很简单。
1)用户拖动东西或其他东西..在后端,将该位置存储在会话或数据库中。像往常一样加载响应。
2)用户再做一次。这次,在后端检查之前保存的会话位置,计算新位置与上次呼叫期间保存的位置之间的距离。您可以使用Google's API for this。如果距离小于使用的半径,您知道会有一些重叠,您可以在将数据返回到前端之前过滤掉这些结果。
这将减少PHP仅为新的结果。如果你想完全避免进行ajax调用,唯一的办法就是将整个数据库加载到javascript中。如果有任何行,你还希望javascript知道。