我需要从数据库中返回一组过滤记录,这些记录的坐标位于当前地图范围内(map.getBounds())
根据谷歌地图API v3,可以使用他们的api和函数“containsLatLng(latlng:GLatLng)”来做客户端,但我想在服务器端执行此实现,然后只返回记录在这个坐标内。
如果地图以非洲为中心,我当前的实施工作正常,但如果地图以同一视图显示中国和加拿大,那么我的实施不起作用,因为太平洋的经度从正变为负。
有关如何准确实施此建议的任何建议吗?
答案 0 :(得分:3)
在Google地图中,LatLngBounds对象构造函数采用矩形边界的西南角和东北角。
知道一点是西南角而不是东南角对解决这个问题至关重要。
如果你知道一个点是西南角,另一个点是东北角,那么比较两个角的经度。您的算法将如下工作:
如果西南角的经度比东北角的经度 小,那么如果它的经度介于这两个经度和纬度之间,则点数在界限范围内。两个角落的纬度。 (这可能就是你为一切所做的事情,这就是为什么它在非洲有条件的情况下有效,但在跨越太平洋的东西却没有。)
如果西南角的经度比东北角的经度更强,那么你的边界越过0经度,你需要反转这个条件:如果一个点在边界内在西南角的经度和东北角的经度之间,它的经度是不。
为了简单起见,因为几乎可以肯定,我假设你永远不会有覆盖北极或南极的界限。 (在谷歌地图中,我甚至不知道你是否可以有这样的界限。)