使用地理跟踪和 SQL 查询

Posted

技术标签:

【中文标题】使用地理跟踪和 SQL 查询【英文标题】:Using Geo Tracking and an SQL query 【发布时间】:2012-07-26 20:45:01 【问题描述】:

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

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

整个过程很像谷歌的地图位置搜索(即搜索“我附近的餐厅”)。

我试过用谷歌搜索这个答案,我在其他论坛上问过,我搜索过 ***,但还没有找到帮助。

【问题讨论】:

【参考方案1】:

您可以使用 mysql Spatial Extensions 按距离对结果进行排序

http://dev.mysql.com/doc/refman/5.5/en/spatial-extensions.html

这允许您进行类似的查询

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; 

http://howto-use-mysql-spatial-ext.blogspot.com/

【讨论】:

那么如何获取访问者的位置以与数据库位置进行比较?或者你是在解释它,它让我无法理解......对不起。 这个例子(和一般的空间扩展)只能在无限平坦的表面上准确地工作。对于某些地理定位用途,它们可能已经足够好,但如果您的位置靠近两极或在 180 度子午线的不同侧(并且靠近它),则会给出完全错误的结果。 所有地点都将在美国大陆内。 @Vatev:大概您不会向佛罗里达州的访客展示阿拉斯加的星巴克 :-) 空间扩展对于用例来说应该足够准确。 @Justgrant2009:获取地理位置是一个不同的问题 :-) 一些浏览器提供 Geolocation API 来确定人的位置 (en.wikipedia.org/wiki/W3C_Geolocation_API)。对于不支持 API 的浏览器(或者如果用户不允许您的网站获知位置),您可以依靠地理定位 IP 地址,尽管这有时非常不准确(大约 85% 的时间您会在 30 英里范围内)但有时你会方式关闭)。查看 MaxMind.com

以上是关于使用地理跟踪和 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

sql sever 2012 sql跟踪和查询快捷键

Chrome 已阻止我的地理位置跟踪

用于跟踪位置的 NativeScript 地理位置设置目的消息

地理位置跟踪并插入 mysqlDatabse

如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)

递归跟踪购买月份的 SQL 查询