检查多边形内是否存在GPS点

时间:2017-12-19 12:52:20

标签: mysql sql geospatial latitude-longitude

在我们的应用程序中,我们有一个地图,用户可以绘制多边形并选择事件时间范围。

事件附加了两种类型的来源:

  1. 静态来源(POLE CAMERA)

  2. 动态源(移动车载摄像头)

  3. 在事件表中,如果新条目来自静态源,我们已经将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列中,基于源类型。

    注意:我们在事件表中拥有大量数据,因此需要优化解决方案。

    我找不到任何有用的链接来处理大数据以实现所需的功能。

0 个答案:

没有答案