首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

在20万条gps数据中查寻最接近给定纬度和经度值的一条数据

2013-06-25 
在20万条gps数据中查找最接近给定纬度和经度值的一条数据各位大虾,帮忙看看这个如何实现,如果写出存储过程

在20万条gps数据中查找最接近给定纬度和经度值的一条数据
各位大虾,帮忙看看这个如何实现,如果写出存储过程怎么写?
数据库内容如图(1)所示:
 ID      BH                DTIME                     WD            JD                 
5073ST4-1     2013-05-19 19:32:39.00034.216397 108.883773
5072ST4-1     2013-05-19 19:32:28.00034.216502 108.883768
5071ST4-1     2013-05-19 19:32:17.00034.216642 108.883603
4960ST4-1     2013-05-18 17:42:57.00034.216785 108.868152
4961ST4-1     2013-05-18 17:42:46.00034.216787 108.868151
4959ST4-1     2013-05-18 17:43:08.00034.216787 108.868152
4958ST4-1     2013-05-18 17:43:19.00034.216788 108.868151
4962ST4-1     2013-05-18 17:42:35.00034.216789 108.868151
                   

比如现在要快速查找纬度值为:34.216505   经度值为: 108.883769在数据库中最接近的值,查询出来的结果应该显示ID为5072的记录,这个用sql语句或者存储过程怎么实现呢? GPS? 快速 相近 存储过程 sql
[解决办法]
select * from (select top 2000 from tbl order by id desc  ) as aa where  
wd (chaxunwd-wd)<wdfudu and (chaxunjd-jd)<jdfudu
从最新的2000条数据中查询 ,查询维度chaxunwd和wd的误差小于多少纬度幅度wdfudu ,
 并且 查询经度chaxunjd和jd
的误差小于多少经度幅度jdfudu   的数据
[解决办法]
select * from (select top 2000 * from tbl order by id desc  ) as aa where  
wd (chaxunwd-wd)<wdfudu and (chaxunjd-jd)<jdfudu
从最新的2000条数据中查询 ,查询维度chaxunwd和wd的误差小于多少纬度幅度wdfudu ,
 并且 查询经度chaxunjd和jd
的误差小于多少经度幅度jdfudu   的数据 

第一次回复 少了个符号
[解决办法]
--方法一
--这个用不到索引,数据量大应该很慢
select top 1 * from tb
order by abs(WD-34.216505),abs(JD-3108.883769)

--方法二
--前提WD,JD 是联合索引
insert into #t
select top 1 * from tb
where WD>34.216505 and JD>3108.883769
order by WD ,JD 
union all
select top 1 * from tb
where WD>34.216505 and JD<3108.883769
order by WD ,JD desc
union all
select top 1 * from tb
where WD<34.216505 and JD>3108.883769


order by WD desc,JD 
union all
select top 1 * from tb
where WD<34.216505 and JD<3108.883769
order by WD desc,JD desc

select top 1 * from #t
order by abs(WD-34.216505),abs(JD-3108.883769)

--方法三
--如果是2008或者更高版本使用geometry数据类型存坐标
--使用相应的方法处理最近坐标点。
[解决办法]

引用:
--方法一
--这个用不到索引,数据量大应该很慢
select top 1 * from tb
order by abs(WD-34.216505),abs(JD-3108.883769)

--方法二
--前提WD,JD 是联合索引
insert into #t
select top 1 * from tb
where WD>34.216505 and JD>3108.883769
order by WD ,JD 
union all
select top 1 * from tb
where WD>34.216505 and JD<3108.883769
order by WD ,JD desc
union all
select top 1 * from tb
where WD<34.216505 and JD>3108.883769
order by WD desc,JD 
union all
select top 1 * from tb
where WD<34.216505 and JD<3108.883769
order by WD desc,JD desc

select top 1 * from #t
order by abs(WD-34.216505),abs(JD-3108.883769)

--方法三
--如果是2008或者更高版本使用geometry数据类型存坐标
--使用相应的方法处理最近坐标点。



跟着高手学习

热点排行