原始帖子:将整数更改为浮点并添加小数点
所以这是背景故事:我正在使用一个从车辆接收 GPS 坐标的数据库,我需要根据经度和纬度值计算出这些车辆的里程。但是,在数据库中,经度/纬度两列都是“Int/Not null”并且没有小数位。所以它们看起来像这样:
Latitude Longitude
36158500 115949833
36340000 115914667
36153488 115944875
我需要它看起来像这样:
Latitude Longitude
36.158500 115.949833
36.340000 115.914667
36.153488 115.944875
在 Tim Lehner 的帮助下,我们弄清楚了如何获得小数点,但我无法使用我已经创建的公式来计算里程。我必须能够根据 radio_name 搜索 long/lat 值,以便我可以单独查看每辆车的里程,这就是我创建一个名为 CTE 和 CTE2 的临时表的原因。但是,如果我调用临时表,代码将不起作用,因为它说它是一个无效对象。现在,如果我插入“AVL”(原始表的名称)而不是在下面的最后一条语句中使用 CTE2,则代码可以正常工作。但是,里程不是使用新的纬度/经度值计算的。
回顾一下:这些列是纬度,经度。我们需要将这些列转换为在纬度 2 个字符后和经度 3 个字符后放置一个小数点。然后我们需要一个名为 Miles 的列,它计算给定的纬度和经度值之间的里程。
任何提示,帮助,指针等都非常感谢!谢谢!
USE [system]
GO
With CTE as
(SELECT * FROM AVL
WHERE (DATE_TIME between '01/30/2013 00:00:00' AND
'01/30/2013 23:59:59') AND radio_name = 'MAS7'),
CTE2 as
(select *,row_number() over(partition by Vehicle_ID order by Date_Time) as RN
FROM CTE)
SELECT *, sqrt((69.1*(previous.Latitude - next.Latitude))*
(69.1*(previous.Latitude-next.Latitude)) +
(69.1*(previous.Longitude-next.Longitude)) *
cos(next.Latitude/57.3) * (69.1*(previous.longitude-next.Longitude)) *
cos(next.Latitude/57.3)) as Miles
From CTE2 as Previous
Join CTE2 as Next
On previous.Vehicle_ID = Next.Vehicle_ID
AND Previous.RN =
Next.RN - 1
select cast(Latitude / 1000000.0 as decimal(10, 6)) as Latitude
, cast(Longitude / 1000000.0 as decimal(10, 6)) as Longitude
from cte2
****EDIT****
期望的结果看起来与此类似:
Latitude Longitude Mileage Radio_Name
36.158500 115.949833 3.444 MAS7
36.340000 115.914667 3.443 MAS7
36.153488 115.944875 4.544 MAS7
(这不是正确的里程,但这只是我正在寻找的结果的一个例子。)