首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SQL中获取周围位置

在SQL中获取周围位置
EN

Stack Overflow用户
提问于 2011-10-26 13:22:57
回答 1查看 176关注 0票数 0

我有不同城市的不同酒店的数据库。每个旅馆都有纬度和经度。

我是否可以通过SQL获取周围的酒店,比如25公里以内。我正在使用mySQL。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-26 14:22:41

首先,在控制台模式下运行此命令。它将创建一个新的MySQL函数(请参见下面的phpMyAdmin)。

代码语言:javascript
运行
复制
DELIMITER |
DROP FUNCTION IF EXISTS GPS_Distance_Meters|
CREATE FUNCTION GPS_Distance_Meters (lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2 DOUBLE) RETURNS DOUBLE
BEGIN
    DECLARE rlo1 DOUBLE;
    DECLARE rla1 DOUBLE;
    DECLARE rlo2 DOUBLE;
    DECLARE rla2 DOUBLE;
    DECLARE dlo DOUBLE;
    DECLARE dla DOUBLE;
    DECLARE a DOUBLE;

    SET rlo1 = RADIANS(lng1);
    SET rla1 = RADIANS(lat1);
    SET rlo2 = RADIANS(lng2);
    SET rla2 = RADIANS(lat2);
    SET dlo = (rlo2 - rlo1) / 2;
    SET dla = (rla2 - rla1) / 2;
    SET a = SIN(dla) * SIN(dla) + COS(rla1) * COS(rla2) * SIN(dlo) * SIN(dlo);
    RETURN (6378137 * 2 * ATAN2(SQRT(a), SQRT(1 - a)));
END|
DELIMITER ;

也可以在phpMyAdmin中运行,但记住将分隔符更改为|,而不是;

代码语言:javascript
运行
复制
DROP FUNCTION IF EXISTS GPS_Distance_Meters|
CREATE FUNCTION GPS_Distance_Meters (lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2 DOUBLE) RETURNS DOUBLE
BEGIN
    DECLARE rlo1 DOUBLE;
    DECLARE rla1 DOUBLE;
    DECLARE rlo2 DOUBLE;
    DECLARE rla2 DOUBLE;
    DECLARE dlo DOUBLE;
    DECLARE dla DOUBLE;
    DECLARE a DOUBLE;

    SET rlo1 = RADIANS(lng1);
    SET rla1 = RADIANS(lat1);
    SET rlo2 = RADIANS(lng2);
    SET rla2 = RADIANS(lat2);
    SET dlo = (rlo2 - rlo1) / 2;
    SET dla = (rla2 - rla1) / 2;
    SET a = SIN(dla) * SIN(dla) + COS(rla1) * COS(rla2) * SIN(dlo) * SIN(dlo);
    RETURN (6378137 * 2 * ATAN2(SQRT(a), SQRT(1 - a)));
END|

现在使用函数。示例:

代码语言:javascript
运行
复制
    SELECT *
    FROM restaurants 
    WHERE GPS_Distance_Meters('48.858205', '2.294359', lat, lng) < 1000 ORDER BY proximite ASC 
    LIMIT 10

在这里,我们从48.858205,2.294359 (与野外lat和lng相比) 1000米(1 1KM)范围内搜索limit 10结果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7898964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档