两个经度和纬度之间的距离

时间:2016-11-29 14:02:38

标签: sql-server-2008

我应该如何为此编写查询? 将P1(a,b)和P2(c,d)视为2D平面上的两个点。

  • a恰好等于北纬度的最小值(LAT_N in 站)。
  • b恰好等于北纬度的最大值 (LAT_N在STATION)
  • c恰好等于西方的最小值 经度(STATION中的LONG_W)
  • d恰好等于最大值 西经(LONG_W in STATION)

查询点P1和P2之间的曼哈顿距离,并将其四舍五入到4位小数。

表STATION(ID号,CITY varchar2(21),STATE varchar2(2),LAT_N号码,LONG_W号码)

这是我的尝试但返回NULL

select
    2 * 3961 * asin(power(sqrt((sin(radians(MAX(LAT_N) - MIN(LAT_N)) / 2) )) , 2 ) + cos(radians(MAX(LAT_N))) * cos(radians(MIN(LAT_N))) * power(sqrt((sin(radians(MAX(LONG_W) - MIN(LONG_W)) / 2) )) , 2 )) as distance from station where city like 'manhattan';

任何想法都将受到赞赏

11 个答案:

答案 0 :(得分:0)

您可以使用此数学公式来获得两点之间的直线距离:

Distance = squarerootof((x2−x1)^2+(y2−y1)^2) 

答案 1 :(得分:0)

您可以使用SQL Server地理数据类型,而不是重新发明轮子。这些数据类型自2008版本开始提供,并且在没有涉及所有数学的情况下,您正在尝试执行的操作中有一些功能。

请查看此example(此处包含的内容太多)或查找有关MSDN的更多信息。

答案 2 :(得分:0)

曼哈顿距离(Taxicab Geometry

曼哈顿点P1(a,b)和P2(c,d)之间的距离= | a-c | + | b-d |

--a= min(LAT_N)
--b= max(LAT_N)
--c= min(LONG_W)
--d= max(LONG_w)
SELECT ROUND(ABS(MIN(LAT_N) - MIN(LONG_W)),4) + ROUND(ABS(MAX(LAT_N) - MAX(LONG_W)),4) FROM STATION;

答案 3 :(得分:0)

对于SQL Server,您可以使用以下查询:

SELECT convert(decimal(10,4),ABS(MIN(LAT_N)-MAX(LAT_N)) + ABS(MIN(LONG_W)-MAX(LONG_W))) FROM STATION

答案 4 :(得分:0)

select round(abs(min(lat_n)- max(lat_n)) + abs(min(long_w)- max(long_w)),4) from  station;

答案 5 :(得分:0)

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^blog/([0-9a-zA-Z_=-]+)$ blog-details.php?title=$1 [NC]
</IfModule>

答案 6 :(得分:0)

解决此问题的最简单方法是
使用数学功能[ Dis。 = sqrt((x2-x1)^ 2 +(y2-y1)^ 2)],请尝试:
对于SQL Server:

cannot convert from 'System.Linq.IQueryable<MyClass>' to 'System.Linq.IQueryable<PaginatedResponse<MyClass>>'

select format(abs(min(LAT_N)-max(LAT_N))+abs(min(long_w)-max(long_w)),'.####') from station;

对于SQL:

select format(sqrt(square(min(LAT_N)-max(LAT_N))+square(min(long_w)-max(long_w))),'.####') from station;

为便于理解:

SELECT ROUND(ABS(MIN(LAT_N)-MAX(LAT_N)) + ABS(MIN(LONG_W)-MAX(LONG_W)), 4) FROM STATION;

答案 7 :(得分:0)

对于MySQL,

SELECT ROUND(ABS(MIN(LAT_N) - MAX(LAT_N)) + ABS(MAX(LONG_W) - MIN(LONG_W)),4) FROM STATION

答案 8 :(得分:0)

这里:a = MIN(LAT_N)c = MAX(LAT_N)b = MIN(LONG_W)d = MAX(LONG_W)

#获取曼哈顿距离的查询是:

    SELECT ROUND(ABS(MIN(LAT_N)-MAX(LAT_N))+ABS(MIN(LONG_W)-MAX(LONG_W)),4) FROM STATION;

答案 9 :(得分:0)

您可以通过Oracle使用以下代码。

SELECT 
    ROUND(ABS(MIN(LAT_N) - MAX(LAT_N)) + ABS(MIN(LONG_W) - MAX(LONG_W)) , 4)
FROM STATION;

答案 10 :(得分:0)

根据问题,他们要求找到曼哈顿距离,但您试图找到两点之间的欧几里德距离。两者都不一样

曼哈顿距离: |X1 - X2| + |Y1 - Y2|

欧几里得距离: sqrt((X2−X1)^2+(Y2−Y1)^2)

select Format(ABS(MIN(LAT_N)-MAX(LAT_N)) + ABS(MIN(LONG_W)-MAX(LONG_W)),'.####') from STATION;