选择落在中心点半径范围内的坐标?

Ali*_*Ali 9 sql google-maps coordinates

我有一个架构中的坐标数据库:

ID:纬度:经度:名称:降序

我已经设置了我的谷歌地图应用程序,以在屏幕上有效地显示标记.但是我需要添加另一个功能,用户可以从中心点查看半径范围内的所有指针.

我怎么写这种类型的sql语句:

Select all pointers that fall within a 10 mile radius of X & Y
Run Code Online (Sandbox Code Playgroud)

Raj*_*noy 26

下面的SQL应该工作:

SELECT * FROM Table1 a 
WHERE (
          acos(sin(a.Latitude * 0.0175) * sin(YOUR_LATITUDE_X * 0.0175) 
               + cos(a.Latitude * 0.0175) * cos(YOUR_LATITUDE_X * 0.0175) *    
                 cos((YOUR_LONGITUDE_Y * 0.0175) - (a.Longitude * 0.0175))
              ) * 3959 <= YOUR_RADIUS_INMILES
      )
Run Code Online (Sandbox Code Playgroud)

这是基于余弦的球面定律,有关该主题的更多详细信息,请查看这篇文章 - http://www.movable-type.co.uk/scripts/latlong.html

  • 这很棒!对于以Km而不是Miles为单位的半径,将3959替换为6371,并以km为单位输入半径. (2认同)

Ste*_*nor 2

您可能需要分两步完成此操作。选择中心位于 X、Y 的 20 英里正方形内的点。假设您首先计算正方形的上、左、下、右坐标,您可以使用以下命令从数据库中获取正方形内的所有点:

select * from coordinates where longitude < right and longitude > left and 
latitude < top and latitude > bottom;
Run Code Online (Sandbox Code Playgroud)

第二步是查看这组点是否在 10 英里半径的圆内。此时,我很想使用 Google 地图使用该google.maps.geometry.spherical.computeDistanceBetween(from:LatLng, to:LatLng, radius?:number)函数来计算点与正方形中心之间的距离。检查答案是否小于 10 英里。该函数使用地球半径作为默认值。