繁体   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