Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何查询纬度/经度区域内的所有记录?_Mysql_Latitude Longitude - Fatal编程技术网

Mysql 如何查询纬度/经度区域内的所有记录?

Mysql 如何查询纬度/经度区域内的所有记录?,mysql,latitude-longitude,Mysql,Latitude Longitude,我希望创建一个MySQL查询,查找世界上指定区域内的所有记录。每个记录包含一个点(lat/lon),我有指定区域的右上角(lat/lon)和左下角(lat/lon) 有了这些信息,我如何才能找到合适的记录?只需查找小于右边缘、大于左边缘(小于下边缘、大于上边缘)的所有点 指向4,4,右上角为(5,5),左下角为(3,3)-3LAT1=MIN(右上角lat,左下角lat) LAT2=最大值(右上lat,左下lat) LON1=最小值(右上lon,左下lon) LON2=最大值(右上lon,左下lo

我希望创建一个MySQL查询,查找世界上指定区域内的所有记录。每个记录包含一个点(lat/lon),我有指定区域的右上角(lat/lon)和左下角(lat/lon)


有了这些信息,我如何才能找到合适的记录?

只需查找小于右边缘、大于左边缘(小于下边缘、大于上边缘)的所有点

指向4,4,右上角为(5,5),左下角为(3,3)-3LAT1=MIN(右上角lat,左下角lat)

LAT2=最大值(右上lat,左下lat)

LON1=最小值(右上lon,左下lon)

LON2=最大值(右上lon,左下lon)

通过这种方式,如果您使用长方体穿过本初子午线或赤道,则应处理查询

要处理180子午线(或反子午线),您需要比较右经线和左经线,检查右数字是否为负,左数字是否为正。如果是这样,那么你已经越过了180度子午线。然后,您的查询必须如下所示:

SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND (lon BETWEEN -180 AND LON1 OR lon BETWEEN LON2 AND 180)

不过,我不想去想如何处理一个位于地球顶部或底部的盒子,它位于一个真正的极点之上

你能运行
描述[表格名称]吗并发布表格结构的输出?如果区域始终是一个简单的矩形/框?惠斯通为此贴出了简单的答案。如果更复杂的话,你可能需要这个。那不能处理反经络。素数和赤道是容易的。你是如何处理反辐射的?我不是为了覆盖一根电线杆而做的PI认为如果盒子没有在经度上对齐,这将不起作用(想象一下纽约市周围有一颗钻石)。一般来说,你需要先使用投影,然后再使用投影。@TreyA:不,在你提到的情况下,它不起作用,但是OP只给了我们右上角和左下角的点,所以它很可能只是一个矩形。是的,我重新读过,上面和下角都是给定的。当我看到lat/lon;)描述的线性框时,我仍然会感到紧张请解释你的反对票,如果你不留下解释,对任何人(包括我)都没有帮助。
SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND (lon BETWEEN -180 AND LON1 OR lon BETWEEN LON2 AND 180)