已经一组经纬度数据(1W多条).
现在输入一个经纬度,找一个离此点最近的点
经度 纬度
112.92248 28.17778
112.92274 28.17356
112.92089 28.1767
112.90476 28.22937
112.93131 28.23108
112.92346 28.22899
112.92125 28.22906
112.91535 28.22881
112.90412 28.22702
112.90625 28.22825
112.91412 28.22786
112.91149 28.22641
112.9106 28.22407
112.90894 28.21994
112.91038 28.22209
112.91143 28.22254
112.91611 28.22273
112.9229 28.22221
112.92581 28.22132
112.92729 28.2212
112.9289 28.21983
112.94791 28.18694
112.94635 28.1873
112.94581 28.18741
这些数据,其实就是一个长沙市区的经纬度...
现输入一个点的经纬度,匹配一个数据库中已有经纬度数据最接近的点
我现在已经知道SQL语句怎么写了,比如:
到112.95 28.18最近的
select top 1 * from tablename
order by SQUARE(经度-112.95)+SQUARE(纬度-28.18)
将上面的语句转换成LINQ怎么写呢????!
你好,
首先我先根据你的测试数据去建立好一个表环境
--先建立全局临时表,最后记得删掉
CREATE TABLE ##经纬度表 (
[经度] float not null,
[纬度] float not null
)
--导入你题目的测试数据
INSERT INTO ##经纬度表 (
[经度],
[纬度]
)
SELECT 112.92248 , 28.17778 UNION ALL
SELECT 112.92274 , 28.17356 UNION ALL
SELECT 112.92089 , 28.1767 UNION ALL
SELECT 112.90476 , 28.22937 UNION ALL
SELECT 112.93131 , 28.23108 UNION ALL
SELECT 112.92346 , 28.22899 UNION ALL
SELECT 112.92125 , 28.22906 UNION ALL
SELECT 112.91535 , 28.22881 UNION ALL
SELECT 112.90412 , 28.22702 UNION ALL
SELECT 112.90625 , 28.22825 UNION ALL
SELECT 112.91412 , 28.22786 UNION ALL
SELECT 112.91149 , 28.22641 UNION ALL
SELECT 112.9106 , 28.22407 UNION ALL
SELECT 112.90894 , 28.21994 UNION ALL
SELECT 112.91038 , 28.22209 UNION ALL
SELECT 112.91143 , 28.22254 UNION ALL
SELECT 112.91611 , 28.22273 UNION ALL
SELECT 112.9229 , 28.22221 UNION ALL
SELECT 112.92581 , 28.22132 UNION ALL
SELECT 112.92729 , 28.2212 UNION ALL
SELECT 112.9289 , 28.21983 UNION ALL
SELECT 112.94791 , 28.18694 UNION ALL
SELECT 112.94635 , 28.1873 UNION ALL
SELECT 112.94581 , 28.18741
--提示:你可以根据情况去建立聚集索引,这里我就不建了.
SELECT TOP (1)
*
FROM ##经纬度表
ORDER BY
SQUARE(经度 - 112.95) + SQUARE(纬度 - 28.18)
经度 纬度
112.94791 28.18694
然后我用LINQPad去查询,结果是一致的.附上LINQ代码和效果图
经纬度表s.OrderBy(m =>
Math.Pow(m.经度 - 112.95, 2.0)
+ Math.Pow(m.纬度 - 28.18, 2.0)
).FirstOrDefault()
生成的SQL如下
DECLARE @p0 Float = 112.95
DECLARE @p1 Float = 2
DECLARE @p2 Float = 28.18
DECLARE @p3 Float = 2
SELECT TOP (1) [t0].[经度], [t0].[纬度]
FROM [##经纬度表] AS [t0]
ORDER BY POWER([t0].[经度] - @p0, @p1) + POWER([t0].[纬度] - @p2, @p3)
如果答案对你有帮助,请给予答案~谢谢!
@dotNetDR_:
真厉害啊……
很不错哎……
173844862 .Net高级技术交流群 有北大专家指导
博问目前是一个好环境.需要各位共同去打造~请多多配合,谢谢.
这个垃圾群,一直聊私事,建议只聊技术,居然还踢人