在我们的应用程序中,我们有一个地图,用户可以绘制多边形并选择事件时间范围。
事件附加了两种类型的来源:
静态来源(POLE CAMERA)
动态源(移动车载摄像头)
在事件表中,如果新条目来自静态源,我们已经将GPS值保存在源表中,因此我们只保存源ID并保持plateGPS字段为空,但对于动态源我们没有GPS值在源表中因为源是动态的,并且每个事件都有不同的位置,这些位置保存在事件表的plateGps字段中,同时sourceId指向源表 (仅供参考)。
事件
CREATE TABLE IF NOT EXISTS `event` (
`eventId` bigint(20) NOT NULL AUTO_INCREMENT,
`eventTime` bigint(20) NOT NULL COMMENT 'ex: 1431201865000 (epoch is milliseconds)',
`sourceId` bigint(20) NOT NULL COMMENT 'ex: pole-code: 1 = JA005, patrolCarCode: 5000 = D4588',
`plateNumber` varchar(40) COLLATE utf8_unicode_ci NOT NULL COMMENT 'ex: 5849',
`plateGps` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'ex: 0.000000 N 0.000000 E')
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
来源
CREATE TABLE IF NOT EXISTS `source` (
`sourceId` bigint(20) NOT NULL AUTO_INCREMENT,
`sourceName` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT 'ex: pole-code: JA005, patrolCarCode:D4588',
`sourceSimIp` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'ex: 192.55.44.22',
`sourceGps` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Only for Fixed source (Poles) ex: 25.110227 N 55.239798 E, 24.993183 N 55.250382 E, 0.000000 N 0.000000 E',
PRIMARY KEY (`sourceId`),
KEY `sourceName` (`sourceName`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
样本表数据
INSERT INTO `source` (`sourceId`, `sourceName`, `sourceSimIp`, `sourceGps`) VALUES
(1, 'Pole 1', '74.200.230.71', '7.8731 N 80.7718 E'),
(2, 'Car 1', '40.214.203.72', '')
INSERT INTO `event` (`eventId`, `eventTime`, `sourceId`, `plateNumber`, `plateGps`)
VALUES
(1, 1498806550534, 1, '1111', null),
(2, 1498806550544, 2, '1111', '7.720517659169257 N 81.4141845703125 E'),
(3, 1498806550554, 2, '1111', '7.9570 N 80.7601 E'),
(4, 1498806550564, 2, '1112', '7.9580 N 80.7601 E'),
(5, 1498806550584, 1, '1111', null),
(6, 1498806550574, 1, '1111', '7.758619524427473 N 81.3427734375 E')
多边形数据示例
{7.89875012596088, 81.27410888671875
7.7695051383446785, 81.56387329101562
7.528595682934752, 81.38946533203125
7.663358425148971, 81.12716674804688}
我们需要获取特定时间内多边形区域内的所有事件。
我找到了上面要实现的this链接,但它要求GPS在几何字段中,而我们在 varchar 格式中使用它。
事件GPS分别位于事件和源表的plateGps和sourceGps列中,基于源类型。
注意:我们在事件表中拥有大量数据,因此需要优化解决方案。
我找不到任何有用的链接来处理大数据以实现所需的功能。