座標系中找一個參考點某個範圍內座標點的問題

一個座標系中有不少點(座標),現給出一個參考點,找出參考點範圍(xxx米,xxx千米)內的點。mysql

1.現實生活中座標就是指經度和緯度,每一個單位之間距離能夠量化(每一個單位緯度距離≈111千米;每一個單位經度距離≈111cosα千米,赤道≈111千米),給出一個座標點,找附近的點,能夠理解爲以該點爲圓心,該圓所覆蓋的點(方便計算能夠理解爲矩形覆蓋),那麼能夠根據量化單位和範圍得出經度和緯度的範圍,好比點[104.292100,30.990100]一千米範圍內的點就是(非球面計算法,經度範圍[104.282200~104.302000],緯度[30.981010~30.999190])算法

2.每條數據座標分別保存在數據庫表中字段x(經度),y(緯度)裏,那麼查詢條件(where x BETWEEN 104.282200 AND 104.302000 AND y BETWEEN 30.981010 AND 30.999190)sql

3.另外mysql,mongodb自己就支持座標計算,直接使用相應查詢語句能夠實現(具體能夠參考相關文檔)mongodb

4.針對座標數據存儲的問題,如何優化。好比mysql能夠採用分表的方法存儲,好比分爲N個表(例如華東、華北、華南、東北),看你怎麼分(其中涉及到臨界點範圍點跨表的問題以及點範圍的判斷,具體分析業務邏輯來劃分處理這個問題),每一個分區都有x,y的範圍,先對點判斷分區,匹配相應的存儲表作查詢,減小檢索數據量大小,以及設置x,y聯合索引,提升檢索速度數據庫

5.後面若是有什麼想法再補充優化

相關文章
相關標籤/搜索