簡體   English   中英

使用代碼查找距離范圍內的點(已在數據庫中存儲了一組經度/緯度)

[英]Finding points in a distance range using code (having set of latitude/longitude stored in database)

我的POIs數據庫確實有一個相對較大的應用程序(在這種情況下,這意味着有兩組,一組包含約40k點,另一組包含約40萬點)。

它是一個Web應用程序,您可以在其中查看給定點的詳細信息並查看周圍的其他點,比如說在25公里范圍內。

到目前為止,我已經使用MS SQL存儲過程解決了它。 它有兩個參數,經度和緯度指定為浮點數,並返回最接近的點(經度/緯度也存儲為浮點數,而不是MSSQL DB中的地理類型)。

我想避免使用存儲過程。 感覺業務邏輯應該保留在代碼中(至少是大多數)。

現在,當我更新項目時(很可能最終會從ASP WebForms過渡到Spring MVC),我想停止使用存儲過程。

有沒有什么好/容易的方法可以做到這一點呢?

我唯一能想到的(基於代碼)是從數據庫中檢索所有點,並通過集合進行一次簡單的迭代,計算集合中給定點與當前點之間的距離。

就像是

Point givenPoint = new Point(lat,lng);
List<Point> allPoints = repo.findAll();
List<Point> pointsInRange = new List<Point>();
for(Point p : allPoints){
    if(givenPoint.distanceTo(p) < 25)
         pointsInRange.add(p);
}

雖然看起來像是一個過分殺傷力。

請參閱快速算法以找到平面給定點的x最接近點 ,其中討論了一些選擇,包括我暗示KD-Tree是適當的數據結構。

另外,這可能還會為您提供其他選擇: 以有效的方式查找最近的點

這是對更廣泛主題的有益討論: http : //en.wikipedia.org/wiki/Nearest_neighbor_search

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM