MySQL Geocoordinates更新

时间:2013-12-30 01:14:10

标签: php mysql

我有一张包含纬度,长度,航向和速度的表格。我正在尝试构建一个查询来根据同一记录中的标题和速度更新所有带有新lat和long的记录。速度以英里/小时为单位,我计划通过chron每小时运行一次查询。

我无法正确查询,但我无法通过搜索找到示例。你们这些兔子戴着帽子吗?


好的,我终于在电脑前了,所以我可以澄清一下我的问题。

首先,我终于有一个有效的查询,但它真的很难看。我的主人不允许我使用存储的函数或程序,所以这(遗憾地)是我想出的。我确信有更好的方法可以做到这一点,这就是我现在所需要的。

以下是我的表格片段:

 latitude            longitude           last_update         speed heading 
 ==================  =================== =================== ===== =======
 39.677788227038114  -98.194243140338530 2014-01-01 22:57:06   293 327.813 
 56.853391622132314   -3.402587399948705 2014-01-01 22:57:06   385 350.699 
-61.242651650343180  -40.628876992126585 2014-01-01 22:57:06   246 141.661 
 27.371112838443963 -450.507351636490900 2014-01-01 22:57:06   477 124.927 
-70.006806324344740  143.713340483057380 2014-01-01 22:57:06   246 176.172 
-25.174349398009255 -123.094903102322010 2014-01-01 22:57:06   498 59.9015 
-10.603401747579188  -62.931741014783654 2014-01-01 22:57:06   354 253.472 
-12.888452428740583 -208.069866383497980 2014-01-01 22:57:06   378 130.198 
  8.274645947879547 -359.522542922571600 2014-01-01 22:57:06   327 123.319 
 85.769466941975270  358.592792804086800 2014-01-01 22:57:06   303 180.456

基本上我想根据每个标题速度(MPH)更新纬度经度记录。我根据自上次计算以来的长度将速度扩展到距离。请注意,只要记录更新, last_update 就会使用当前时间进行更新。

UPDATE Drones 
SET 
    latitude =  DEGREES( 
        ASIN( SIN(RADIANS(latitude)) * COS((speed*((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_update))/3600))/3963.1676) + COS(RADIANS(latitude)) * SIN((speed*((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_update))/3600))/3963.1676) * COS(RADIANS(heading)) ) 
    ), 
    longitude = DEGREES( 
        RADIANS(longitude) + 
        ATAN2( 
            SIN(RADIANS(heading)) * SIN((speed*((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_update))/3600))/3963.1676) * COS(RADIANS(latitude)), 
            COS((speed*((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_update))/3600))/3963.1676) - SIN(RADIANS(latitude) * SIN( 
            ASIN( SIN(DEGREES(RADIANS(latitude)) * COS((speed*((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_update))/3600))/3963.1676)+COS(RADIANS(latitude))*SIN((speed*((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_update))/3600))/3963.1676)*COS(RADIANS(heading))))))
        ) 
    ) 
WHERE 1;

我通常会处理大约1,000条记录,此更新平均需要大约0.058秒。 SQL不是我的强项,也不是地理计算,所以感谢您的帮助。

0 个答案:

没有答案