Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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 使用地理跟踪和SQL查询_Mysql_Search_Geolocation_Geocoding - Fatal编程技术网

Mysql 使用地理跟踪和SQL查询

Mysql 使用地理跟踪和SQL查询,mysql,search,geolocation,geocoding,Mysql,Search,Geolocation,Geocoding,我正在建立一个数据库,用户可以在其中键入搜索字段以查找他们正在查找的内容,并且我需要以一种方式列出结果,其中最接近用户的人将首先显示,并以他们的方式远离用户的当前位置 因此,我正在寻找一种方法,在查询中包含(考虑)地理位置。数据库将有大量字段可供搜索,包括每个字段的位置 整个过程与谷歌地图位置搜索(即搜索“我附近的餐馆”)非常相似 我试过用谷歌搜索这个答案,我在其他论坛上也问过,我搜索过stackoverflow,但还没有找到帮助来完成这个任务。你可以使用MySQL Spatial Extens

我正在建立一个数据库,用户可以在其中键入搜索字段以查找他们正在查找的内容,并且我需要以一种方式列出结果,其中最接近用户的人将首先显示,并以他们的方式远离用户的当前位置

因此,我正在寻找一种方法,在查询中包含(考虑)地理位置。数据库将有大量字段可供搜索,包括每个字段的位置

整个过程与谷歌地图位置搜索(即搜索“我附近的餐馆”)非常相似


我试过用谷歌搜索这个答案,我在其他论坛上也问过,我搜索过stackoverflow,但还没有找到帮助来完成这个任务。

你可以使用MySQL Spatial Extensions按距离排序结果

这允许您执行如下查询:

SELECT name, AsText(location), SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) AS distance 
FROM Points 
WHERE Intersects( location, GeomFromText(@bbox) ) 
AND SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) < @radius 
ORDER BY distance; 
选择名称、AsText(位置)、SQRT(功率(ABS(X(位置)-X(@center))、2)+功率(ABS(Y(位置)-Y(@center))、2)作为距离
从点
相交处(位置,GeomFromText(@bbox))
和SQRT(POW(ABS(X(位置)-X(中心)),2)+POW(ABS(Y(位置)-Y(中心)),2))<@radius
按距离排序;

那么,如何将访问者的位置与数据库位置进行比较呢?还是你在解释这件事,我都快忘了。。。对不起,这个例子(以及一般的空间扩展)只在无限平面上准确地工作。对于某些地理定位应用来说,它们可能已经足够好了,但是如果你的位置靠近两极或者在180子午线的不同侧面(并且离它很近),它们会给你带来完全错误的结果。所有地点都将位于美国大陆。@Vatev:大概你不会向佛罗里达州的游客展示阿拉斯加的星巴克:-)空间扩展应该足够准确,以满足使用情况。@Justgrant2009:获取地理位置是一个不同的问题:-)一些浏览器提供地理位置API,以确定用户的位置此人位于()。对于不支持API的浏览器(或者如果用户不允许您的网站了解位置),您可以重新定位IP地址,尽管这有时是非常不准确的(大约85%的时间您将在30英里以内,但有时您将远离)。查看MaxMind.com