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