SQL lat在lat long bounds内长

时间:2017-06-06 14:49:59

标签: mysql sql location geometry latitude-longitude

我正在使用MySQL 5.5.52。缩写:Lat =纬度,长=经度,NE =东北,SW =西南。

我有两个SQL表:

第一个表包含"区域"。每个区域由ID,NE Lat,NE Long,SW Lat,SW Long组成。

第二个表包含" Points"。每个Point由ID,Lat,Long组成。

我需要一个SQL语句,给定一个区域ID列表将返回这些区域中的点。如果Point的Lat-Long位于由Area&的NE Lat-Long和SW Lat-Long定义的右上角和左下角的正方形内,则Point被定义在Area中。

注意:我可以将要定义的区域更改为具有半径的单个Lat-Long,其中Points位于'圈内。但理想情况下,我不想这样做,除非有更高效的SQL语句来解决这个问题。

1 个答案:

答案 0 :(得分:1)

根据点位置在区域范围内的条件加入两个表。

Select areaTable.*, pointsTable.*
From pointsTable
Join areaTable
On pointTable.lat between areaTable.SWLat and areaTable.NELat
and
pointTable.long between areaTable.SWLong and areaTable.NELong

给出每个区域和相应的点。

如果需要,使用特定区域的where子句进一步参数化。

Where areaTable.NELat=@areaNELat
and areaTable.NELong=@areaNELong
and areaTable.SWLat=@areaSWLat
and areaTable.SWLong=@areaSWLong

只需用你喜欢的区域纬度和长值代替@s。