搜索地理坐标的数据库设计

时间:2013-12-29 16:24:32

标签: mysql database database-design geolocation

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

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

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

  1. 时间t最近的个人是什么?
  2. 在时间t,哪些人在(周长50公里)?
  3. 在时间t,预订中有哪些人? (预留由多边形给出)
  4. 是否有一些可用于MySQL的内置功能?我应该选择不同的数据库吗?

2 个答案:

答案 0 :(得分:2)

根据MySQL Spatial Extension GEOMETRY(简单功能规范),有OGC实现SFS。它是许多数据库引擎的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 Spatial Extension。如果您要进行更多研究,可以在其他问题上找到答案。


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

答案 1 :(得分:0)

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

基本上你需要计算地球表面弧线的长度,用三角法计算2个网格点之间的距离。

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

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