Haversine公式的MySQL的反向?
在我的数据库中,我存储了一个中心点以及一个半径(以米为单位)。
我期待通过lat / lng,然后让我存储的mysql值创建一个圆圈来告诉我,如果我传入的点是在该圆圈内。 有没有什么能够让我做到这一点,类似于沙滩论坛(它会假设我的观点已经在数据库中)。
Haversine公式:(3959 * acos(cos(弧度(40))* cos(弧度(lat))* cos(弧度( long
) - 弧度(-110))+ sin(弧度(40))* sin(弧度long
)))
D b:
circleLatCenter,circleLngCenter,Radius
传入>从foo中选择id,lat,lng in(使圆函数:circleLat,circleLng,radius)
MySQL拥有大量的空间数据功能:
MySQL的空间扩展
我认为测量几何之间关系的部分就是你所追求的内容:
几何之间的关系
我通过大圆距计算边界框并查询数据库来完成类似的地理搜索。 您仍然需要在应用程序中再次传递“从边界框到圆”的“圆角”。
因此,给定一个点的数据库,一个搜索点(X,Y)和一个距离D,找出(X,Y)中D的所有点:
作为一个捷径,我通常计算纬度和经度(在赤道,因为每英里的度数在两极处不同)的每英里度数,并且导出deltaX和deltaY为(D *度-lat-per-mile)或度 - lon-per-mile。 赤道与极点的差别并不重要,因为我已经计算出SQL查询后的实际距离。
FYI - 0.167469至0.014564度 - 每英里,以及0.014483度 - 每英里
我知道这是一个长期死去的帖子,但是,如果有人遇到过这个问题,你根本不需要创建一个“逆向半正规公式”。 Haversine公式给出了点a和点b之间的距离。 您需要点b和点a之间的距离,以便进行计算。 这些是相同的价值。
SELECT *,
( 3959 * acos( cos( radians(40) ) * cos( radians( `circleLatCenter` ) ) * cos( radians( `circleLngCenter` ) - radians(-110) ) + sin( radians(40) ) * sin( radians( `circleLngCenter` ) ) ) as `haversine`
FROM `table` WHERE 1=1
HAVING `haversine` < `Radius`
链接地址: http://www.djcxy.com/p/42731.html