我已经收集了爱尔兰各地大约60个电影院位置的地理坐标,我想在我的WP7应用程序中使用它们来显示离你当前位置最近的电影院。
我想我可以将它们保存在一个XML文件中,但我认为这不能实现我试图实现的目标,即能够搜索整个坐标列表,并显示(例如)距离其位置25公里内出现的任何电影院。
我已经找到了一些链接来帮助找到两个点之间的距离,所以这部分应该不会太糟糕。
我该怎么做才能做到这一点?提前感谢
发布于 2012-04-11 23:59:11
我创建了一个类似的服务。
首先,正如Shedal还指出的那样,考虑在外部服务中托管位置。当你需要添加更多的位置时,这将使你的生活变得容易得多。( App Hub中的更新应用程序服务可能需要长达10天的时间,如果您需要快速修复错误的位置,这是一个很长的时间)
其次,一旦加载了位置列表,就很容易遍历它们并找到最近的电影院。您可以使用Haversine公式来计算两个地理位置之间的距离(此公式考虑到地球是圆的,而不是平的-与毕达哥拉斯定理不同)。幸运的是,WP GeoLocation类附带了一个名为GetDistanceTo的内置函数,您可以使用它。
现在的问题只是一个简单的Linq查询:
List<GeoCoordinate> cinemaLocations = new List<GeoCoordinate>();
GeoCoordinate myLocation = new GeoCoordinate();
var closestCinemas = cinemaLocations.OrderBy(s => s.GetDistanceTo(myLocation));
var closestCinema = closestCinemas.FirstOrDefault();发布于 2012-04-11 23:42:03
影院的名单不是应该不时更新吗?如果是这样的话,我会在某个地方托管一个web服务,并从您的应用程序中调用它来获取最新的影院列表。
关于距离的计算,简单地说就是勾股定理。
D = sqrt(abs(x2 - x1) + abs(y2 - y1))发布于 2012-04-11 23:45:45
我会将它们存储在SQL server中(SQL lite可以在WP7应用程序内部运行)。然后,我将根据您的当前位置使用某个值的+/-使用lat和lon进行查询。现在,您将需要确保补偿接近0度轴,但这将给您一个正方形面积,以减少您的结果。一旦有了它,你就可以遍历结果集,寻找到每个点的距离,只需删除位于该正方形角落的结果,就可以创建一个具有定义的最大容差的、面向所有方向的结果集。当然,我还没有解决这个确切的问题(我倾向于依赖像Neo4J Spacial这样的项目,它可以自动处理这样的事情(并且非常好)
https://stackoverflow.com/questions/10109260
复制相似问题