【问题标题】:Database design for search of geocoordinates用于搜索地理坐标的数据库设计
【发布时间】:2013-12-29 16:24:32
【问题描述】:

在 MySQL 数据库中,我有动物(大象)的跟踪数据。目前的设计如下:

timestamp(INT) | individualID(INT) | longitude(DECIMAL) | latitude(DECIMAL)

现在我想向数据库提出几个问题

  1. 在时间 t 最接近的个体是什么?
  2. 在时间 t 周围(周长 50 公里)有哪些人?
  3. 在时间 t 有哪些人在预订中? (保留由多边形给出)

是否有一些可用于 MySQL 的内置功能?我应该选择不同的数据库吗?

【问题讨论】:

    标签: mysql database database-design geolocation


    【解决方案1】:

    有一个MySQL Spatial Extension,它基于OGC SFS(简单功能规范)实现GEOMETRY。它是许多数据库引擎实现 SPATIAL 数据的基础标准。

    对于客户端,有OpenLayers、HTML5 SVG、Google Maps。看GIS.StackExchange.com


    根据我的经验(如果可以考虑,就像 2 年前一样),空间数据的 MySQL 实现就足够了,但不是最好的。它在 Oracle 和 MS SQL Server (IMHO) 中实现得更好。如果您不打算构建非常复杂的地图 - MySQL 功能就足够了。对于复杂的功能,我建议使用不同的数据库引擎。


    在 SO:Fastest Way to Find Distance Between Two Lat/Long Points 上有类似的问题,其中接受的答案使用 MySQL 空间扩展。如果您要进行更多研究,您可能会找到其他问题的答案。


    我也可以尝试提供查询依据:

    【讨论】:

      【解决方案2】:

      我使用以下代码http://www.geodatasource.com/developers/php 克服了我的 PHP 应用程序中的前 2 个问题,那里还有一个 SQL 版本的解决方案。

      基本上,您需要计算地球表面上弧的长度,使用三角函数来获得 2 个网格点之间的距离。

      然后,您可以比较多个人与您的基地位置的距离,并消除所有距离超过 50 公里的动物,以使您的动物群在周边范围内。

      您问题的第 3 部分需要一些更复杂的代数,这不是我已经解决的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-18
        • 2011-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多