Sql 从纬度和经度列表中确定距离
目前我有一张类似这样的桌子Sql 从纬度和经度列表中确定距离,sql,sql-server-2008,gps,Sql,Sql Server 2008,Gps,目前我有一张类似这样的桌子 _ID DeviceID Timestamp Latitude Longitude 4 13 1.1.2011 10:00:13 30.234 24.953 5 13 1.1.2011 10:00:17 30.235 24.953 6 13 1.1.2011 10:00:20 30.235 24.954 7 14 1.1
_ID DeviceID Timestamp Latitude Longitude
4 13 1.1.2011 10:00:13 30.234 24.953
5 13 1.1.2011 10:00:17 30.235 24.953
6 13 1.1.2011 10:00:20 30.235 24.954
7 14 1.1.2011 10:00:21 54.532 13.256
8 13 1.1.2011 10:00:22 30.235 24.955
9 13 1.1.2011 10:00:24 30.234 24.954
- _身份证
- 主键
- int
- 设备ID
- int
- 非空
- 时间戳
- 日期时间
- 非空
- 纬度
- 真实的
- 非空
- 经度
- 真实的
- 非空
是的,连接来自4-5-6-8-9(由时间戳确定)。表中是不同设备(如7)的值,但可以使用where子句轻松地对这些设备进行分类。我想得到的距离是连接上述列表中的点时得到的直线长度。以下是一个脚本,它使用您列出的数据创建一个基本表,将其转换为有效的线字符串,然后计算其长度:
declare @yourTable table (latitude decimal(10,7), longitude decimal(10,7))
insert into @yourTable select 30.234, 24.953
insert into @yourTable select 30.235, 24.953
insert into @yourTable select 30.235, 24.954
insert into @yourTable select 54.532, 13.256
insert into @yourTable select 30.235, 24.955
insert into @yourTable select 30.234, 24.954
DECLARE @LINE VARCHAR(MAX) = 'LINESTRING (';
SELECT @LINE = @LINE+ convert(varchar(20),latitude) + ' ' + convert(varchar(20),longitude) + ','
FROM @yourTable
select @LINE = LEFT(@LINE,LEN(@LINE)-1)+')'
DECLARE @g geography;
SET @g = geography::STGeomFromText(@LINE, 4326);
SELECT @g.STLength();
这些点是如何相互连接的?
4
是否连接到连接到6
的5
等?你想计算的长度是多少?连接所有点的线段长度之和?如果添加了更多点或删除了一些点,如何保证点的顺序?好的,如果您需要顺序,这在本文中是有意义的,而不是从@yourTable创建一个有序子查询:FROM(选择*FROM@yourTable order by…)
问题在于,如果你有很多点(就像我一样),字符串的长度非常有限。但是如果我在stgeomefromtext()
中输入了23个以上的坐标,它将已经生成ArgumentException(指定的输入不代表有效的地理实例)。请找出每个相邻点之间的距离,然后将其相加。要我写sql吗?