首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态确定/创建地理/包围框

动态确定/创建地理/包围框
EN

Stack Overflow用户
提问于 2018-09-21 19:36:52
回答 1查看 691关注 0票数 2

我有一张MySQL桌子,上面写着lat/lon (想想学校、校园或购物中心)。

每个位置(学校/购物中心)都可以在表中存储数十个GPS位置。所有位置都是使用移动应用程序捕获的,这些位置可以代表从入口到特定房间(会议)到电梯等容易识别的位置的所有内容。

用户提交一个请求(即在isle 6上清理看门人),我需要确保提交的请求(清理)在地理位置范围内,为该位置找到彼此最遥远的4个点。

目前,我们正在使用Haversine搜索,但我们希望将其转换为有围栏的系统。我们不能做的是建立一个单独的地理位置表。

我在谷歌上搜索过,没有发现任何东西(我可能没有使用正确的术语)。如何构建该查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-21 21:53:38

在近似的第一级,你可以扫描一个包围框。

假设您有一个loc表,其中包含loc_idlatlng列。然后说你的候选人点有@ptLat@ptLng的位置。

计算每个位置的边框。这对纬度和经度都很好,除非你离北极或南极几度以内,或者接近180°经度。

代码语言:javascript
复制
          SELECT loc_id, MAX(lat) north, MAX(lng) east, MIN(lat) south, MIN(lng) west
            FROM loc
           GROUP BY loc_id

如果您在(loc_id, lat, lng)上有一个索引,这是快速的。这也是快速的,因为你可以避免所有的三角函数在大圆圈的计算。

一旦你有了包围框,你就可以决定你的候选点是否在里面。

那你就可以

代码语言:javascript
复制
 SELECT loc_id
   FROM  (
          SELECT loc_id, MAX(lat) north, MAX(lng) east, MIN(lat) south, MIN(lng) west
            FROM loc
           GROUP BY loc_id
         ) box
   JOIN ( SELECT @ptLat ptLat, @ptLon, ptLon ) pt
        ON ptLat <= north
       AND ptLat >= south
       AND ptLon <= east
       AHD ptLon >= west

这将获得与候选点匹配的loc_id值的结果集。

如果你的lat,液化天然气数据是混乱的--如果它有很多离群点--这不会很好的工作。它对错误很敏感。例如,如果冰岛的一个位置附近有很多点,但格陵兰的一个点编码错误,那么包围框就会大得离谱。

如果它不够精确,你应该研究凸包算法。但是,这很可能会将您带到纯SQL之外。

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

https://stackoverflow.com/questions/52450120

复制
相关文章

相似问题

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