问题描述
|
目前我有一张桌子看起来像这样
_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
_ID
首要的关键
整型
设备编号
整型
不为空
时间戳记
约会时间
不为空
纬度
真实
不为空
经度
真实
不为空
经过一番搜索(也在此处),我将找到许多有关计算两点之间距离的解决方案。但是我想计算点列表之外的距离。
因此,我进行了更多搜索,发现STLength方法似乎可以满足我的要求。问题是我需要从我拥有的点列表中构造出一个几何图形,而有关构造几何图形实例的帮助页面却没有告诉我该怎么做。 (至少它不会以我能理解的方式告诉它。)
谁能告诉我如何从经纬度清单中创建几何图形?
更新资料
好的,到目前为止,我的问题中还缺少一件事:
我有很多点可以计算一个距离(通常在1,000到20,000之间,但一到两次最多可达40,000点)。
另外,也许我只是采用完全错误的方法来拉远距离。因此,如果您还有其他想法可以使数据距离更远,请告诉我。
也不必关心点的排序,添加或删除。当查询运行时,这些术语中的数据是稳定的。
要回答克里斯评论:
是的,连接是从4-5-6-8-9(由时间戳确定)。该表中包含不同设备的值(例如7),但是可以使用where子句轻松地将它们分类。我想要获得的距离是将上述列表中的点连接起来后得到的线的长度。
解决方法
这是一个脚本,该脚本将使用您概述的数据创建基本表,将其变成有效的LINESTRING字符串,然后计算其长度:
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.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();