Postgresql
如何在 postgresql 中找到最近的 lat 和 lang
我正在嘗試從指定的 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;