【问题标题】:Point in Polygon function for MySQLMySQL的多边形函数中的点
【发布时间】:2015-06-10 17:57:05
【问题描述】:

我将 GPS 信息存储在多个 MySQL 表中,其结构如下:
(在 Ubuntu Server 14.04.1 上运行 MySQL Server 5.5.43 版)

事件编号、时间、纬度、经度
1、12:52:50、40.5401、-86.5715
1、12:52:51、40.5404、-86.5707
1、12:52:52、40.5406、-86.5699
1、12:52:53、40.5409、-86.5691
1、12:52:54、40.5411、-86.5683
1、12:52:55、40.5414、-86.5676
2、13:22:35、40.9723、-85.1755
2、13:22:36、40.9726、-85.1759
2、13:22:37、40.9728、-85.1762
2、13:22:38、40.9731、-85.1766
2、13:22:39、40.9734、-85.1770
2、13:22:40、40.9737、-85.1773

每个表代表一个单独的车辆,每个表中有数百个单独的“行程”。

我们的目标是通过测试每小时有多少车辆到达边界框来找到泊松分布的 lambda。虽然有几种算法可以确定一个点是否在多边形内,但我只关心车辆进入边界区域的初始时间。

我愿意接受任何建议。理想情况下,我想在 MySQL 中创建一个函数,它可以计算每小时进入边界区域的车辆数量。

【问题讨论】:

  • 车辆可以退出箱子再重新进入吗?如果是这样,这还算吗?
  • 你在使用 MyISAM,表是否有 SPATIAL 索引?

标签: mysql latitude-longitude point-in-polygon


【解决方案1】:

车辆第一次进入多边形是

SELECT MIN(time)
    FROM tbl
    WHERE IsInPoly(latitude, longitude);

(其中 IsInPoly 是任何功能。如果您有一个 SPATIAL 索引,那么 MySQL 中就有一个功能;我手头没有具体细节。)

如果需要“车辆在多边形内时每个event_number的第一次”:

SELECT MIN(time)
    FROM tbl
    WHERE IsInPoly(latitude, longitude)
    GROUP BY event_number;

这些查询可能会涉及表扫描,因此不会很快。

【讨论】:

  • 谢谢瑞克,很遗憾我没有空间索引。我正在使用 InnoDB,我知道它支持空间数据,但不支持它们的索引。我开始认为 PHP 可能是一个更可行的解决方案...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
相关资源
最近更新 更多