首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql中获取我周围的位置?

如何在mysql中获取我周围的位置?
EN

Stack Overflow用户
提问于 2014-07-31 17:29:57
回答 2查看 54关注 0票数 1

我正在尝试通过距离从mysql数据库中检索位置,我需要一个查询,在那里我可以插入一个点,并从我的数据库中获得10英里内的点,关于查询时间和性能我有这个代码在线,但它不工作,你有什么建议

代码语言:javascript
复制
set @lat= 0;
set @lon = 0;
set @dist = 10;
set @rlon1 = @lon-@dist/abs(cos(radians(@lat))*69);
set @rlon2 = @lon+@dist/abs(cos(radians(@lat))*69);
set @rlat1 = @lat-(@dist/69);
set @rlat2 = @lat+(@dist/69);
select * from points 
  where st_within(4326, envelope(linestring(point(@rlon1, @rlat1), point(@rlon2, @rlat2))))

order by st_distance(point( 0,0), 4326) limit  10;
EN

回答 2

Stack Overflow用户

发布于 2014-07-31 17:43:38

您找到的代码是用于带有PostGIS插件的PostgreSQL。它在MySQL中不起作用。

对于地理空间查询,最好将PostgreSQL与PostGIS插件一起使用,但如果您所需要的只是给定坐标10英里范围内的坐标列表,那么MySQL就可以了。

票数 2
EN

Stack Overflow用户

发布于 2014-07-31 18:35:26

使用this blog post中的函数可以计算搜索半径的边界框。这只是一个近似值,会返回一些比所需距离稍远的结果。

代码语言:javascript
复制
$coordinate = array
    (   $latitude,
        $longitude,
    );
$distanceInKilometres = ($distanceInMiles * 1.609344);

$boundBoxTop = distanceInKilometres($coordinate, $distanceInKilometres, 0);
$boundBoxRight = distanceInKilometres($coordinate, $distanceInKilometres, 90);
$boundBoxBottom = distanceInKilometres($coordinate, $distanceInKilometres, 180);
$boundBoxLeft = distanceInKilometres($coordinate, $distanceInKilometres, 270);

$sql = '
    SELECT
        *,
        SQRT(POWER(ABS(`latitude` - '.$latitude.'), 2) + POWER(ABS(`longitude` - '.$longitude.'), 2)) AS `distance`
    FROM
        `points`
    WHERE
        `latitude` >= '.$boundBoxTopBottom[0].'
        AND `longitude` >= '.$boundBoxTopLeft[1].'
        AND `latitude` <= '.$boundBoxTopTop[0].'
        AND `longitude` <= '.$boundBoxTopRight[1].'
    ORDER BY
        `distance`
    ';

// run the query and get the results

假设您有变量$latitude$longitude$distanceInMiles

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

https://stackoverflow.com/questions/25055415

复制
相关文章

相似问题

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