我应该如何为此编写查询? 将P1(a,b)和P2(c,d)视为2D平面上的两个点。
查询点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';
任何想法都将受到赞赏
答案 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;