从 MySQL 数据库中获取 Google Maps .getBounds 中的所有记录?

2022-08-30 20:16:43

好吧,我有一个大约1800行的数据库,每行都有一列,我正在尝试做的是,它针对Google Maps V3进行查询,结果就像我想做的一样,是获取数据库中纬度和液化率在这些范围内的每个记录。有什么建议吗?latlong.getBounds((33.564398518424134, -79.38014701875002), (35.375726155241175, -76.08424858125002))

我想我必须推断地图的其他2个角,因为只包含2个点(我想地图的2个角),我想在4点以内。如果我这样做,我最终会得到一个类似这样的数组......如果我错了,现在请纠正我,但这应该是地图的西北,东北,西南,东南角,拉丁文。.getBounds

33.564398518424134, -79.38014701875002
33.564398518424134, -76.08424858125002
35.375726155241175, -79.38014701875002
35.375726155241175, -76.08424858125002

好的,那么如果我有这些数据,我将如何构建一个查询来获取这些坐标内的行?表称为 - 列是和...另外,如果有更简单的方法,或者我只是对我的方法论感到疯狂,请随时让我知道。tilistingslatlng

谢谢


答案 1

所有以前的答案只适用于世界的1/4!

W3t Tr3y的答案很接近,但它有一个错误(额外的“<”)。

他们都只为美国工作,因为它在北半球。它们不适用于南半球,也不适用于东部国家(格林威治权利)。

这是一个简单的解决方案,没有功能或复杂的东西。

字母是你从map.getBounds()获得它们的顺序的结果,即swlat,swlng,nelat,nelng = a,b,c,d。

SELECT * FROM tilistings WHERE
(CASE WHEN a < c
        THEN lat BETWEEN a AND c
        ELSE lat BETWEEN c AND a
END) 
AND
(CASE WHEN b < d
        THEN lng BETWEEN b AND d
        ELSE lng BETWEEN d AND b
END) 

或另一个带有和/或的解决方案(您可以测试它的速度,我不知道如何在WorkBench中多次运行它)

SELECT * FROM tilistings WHERE
(a < c AND lat BETWEEN a AND c) OR (c < a AND lat BETWEEN c AND a)
AND 
(b < d AND lng BETWEEN b AND d) OR (d < b AND lng BETWEEN d AND b)

现在,您可以绘制整个世界:)我希望有人能把上面的答案标记为不正确,因为它们让我们浪费了很多时间给像我这样的数百万有学问的人。我想知道他们是如何在实际上不起作用的情况下获得这么多选票的!

PS:您的地图像素边缘与坐标的精确15位小数值匹配的几率比错过整个世界3/4的几率低几倍!


答案 2

如果来自谷歌: ( (a, b), (c, d) )

SELECT * FROM tilistings WHERE lat > a AND lat < c AND lng > b AND lng < d


推荐