Postgresql

如何在 postgresql 中找到最近的 lat 和 lang

  • June 5, 2018

我正在嘗試從指定的 lat 和 lang 中找到最近的 lang 和 lat 我嘗試了下面提到的查詢,在我的查詢中我提到了 muscat 的 lat 和 lang 的地方,所以我想顯示最近的 muscat 城市,限制為 3 以及馬斯喀特

CREATE TABLE IF NOT EXISTS tablename(_id SERIAL NOT NULL UNIQUE PRIMARY KEY,city VARCHAR, Lat NUMERIC, Lang NUMERIC);

select * from (
SELECT  *,( 3959 * acos( cos( radians(6.414478) ) * cos( radians( lat ) ) * cos( radians( lang ) - radians(12.466646) ) + sin( radians(6.414478) ) * sin( radians( lat ) ) ) ) AS distance 
FROM tablename
) al
where lat >  23.61  OR lang >  58.54
ORDER BY distance
LIMIT 1;

這是我的表格(假設數據不准確的緯度和經度)數據

| id | City      |  lat      | lang    |
----------------------------------------
|  1 | muscat    | 23.61     | 58.54   |
|  2 | sur       | 22.566    |59.52    |
|  3 | Muhafazat |23.585     |58.40    |
|  4 | ZZZ       | 5.8       | 7       |
|  5 | AAA       | 9.22      | 5       |
|  6 | Barka     |23.613     |58.592   |

預期輸出:

   | id | City      |  lat      | lang    |
   ----------------------------------------
   |  1 | muscat    | 23.61     | 58.54   |
   |  2 | sur       | 22.566    |59.52    |
   |  3 | Muhafazat |23.585     |58.40    |
   |  6 | Barka     |23.613     |58.592   |

是的,我得到了這個查詢的輸出,感謝所有試圖幫助我的人:)

select * from (SELECT  *,( 3959 * acos( cos( radians(6.414478) ) * cos( radians( lat ) ) * cos( radians( lang ) - radians(12.466646) ) + sin( radians(6.414478) ) * sin( radians( lat ) ) ) ) AS distance FROM table name) al where lat >= 22.566 OR lat >= 59.52 AND lat <= 22.566 OR lat <= 59.52 ORDER BY distance LIMIT 3;

引用自:https://dba.stackexchange.com/questions/208792