簡體   English   中英

如何通過lat lon為我的WP7應用程序分組興趣點

[英]how to group points of interest by lat lon for my WP7 app

我有一個自己的PointOfInterest類(大約1500)的集合,每個類都有自己的LatitudeLongitude雙重屬性。

我試圖在我的屏幕上繪制它們,但是在某個邏輯縮放級別,沒有任何一點顯示它們中的一些,因為它們非常接近。

如何通過他們的lat lon屬性非常有效地對POI進行分組?

我有這種類型的東西:

var pointOfInterests = (from p in PointsOfInterest select p).Distinct(new EqualityComparer()).ToList();

EqualityComparer是:

public class EqualityComparer : IEqualityComparer<PointOfInterest>
{
    public bool Equals(PointOfInterest x, PointOfInterest y)
    {
        return Math.Round(x.Latitude.Value, PointOfInterest.DecimalPlaceFilterLevel) == Math.Round(y.Latitude.Value, PointOfInterest.DecimalPlaceFilterLevel) &&
            Math.Round(x.Longitude.Value, PointOfInterest.DecimalPlaceFilterLevel) == Math.Round(y.Longitude.Value, PointOfInterest.DecimalPlaceFilterLevel);
    }

    public int GetHashCode(PointOfInterest obj)
    {
        return Math.Round(obj.Latitude.Value, PointOfInterest.DecimalPlaceFilterLevel).GetHashCode() ^ Math.Round(obj.Longitude.Value, PointOfInterest.DecimalPlaceFilterLevel).GetHashCode();
    }
}

PointOfInterest.DecimalPlaceFilterLevel是我在用戶處於certian縮放級別時設置的靜態int屬性。

但這不起作用,我一直在重疊POI並且它不是很快......因為我在打電話,我需要它表現得非常好。

謝謝你提供的所有幫助

您可能想要考慮四叉樹。 這些樹代表一個矩形空間(lat / lon會好的,除非你在北極/南極周圍有很多POI :)),節點的子節點將它細分為四個相等的部分。 Quadtrees有很好的文檔記錄,你找到一個能滿足你需要的算法應該沒有任何問題。

另一方面,一個更簡單的解決方案可能只是一個問題。 想象世界是一個大網格。 您可以根據需要將網格單元格設置為大或小,但最后它只是網格,每個網格單元格包含一組PointOfInterest對象。 將您的POI插入到網格上的適當位置,當您需要時,可以輕松找到要過濾的所有POI。

我用C#代碼做了一個桶(網格)版本的例子。 這應該能夠處理許多點(快速運行時間代碼)。

http://kunuk.wordpress.com/2011/09/15/clustering-grid-cluster

暫無
暫無

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

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