在包含位置坐标的XML文件中搜索和排序

时间:2012-06-12 10:17:17

标签: xml cordova xml-parsing

我有一个xml文件,用于存储位置名称及其地址和坐标。我需要这些数据来帮助定位地图上的位置。现在xml文件很大,因为它包含大量数据,所以我想减少搜索时间,因为我想在移动平台上部署应用程序 - android和iphone。我究竟做的是,获取用户当前位置,然后逐个解析xml,获取坐标,计算位置和用户之间的距离,然后如果距离小于半径,则在屏幕上打印。 所以我可以在这里实现任何排序或搜索算法,这将是用户当前位置的坐标???

4 个答案:

答案 0 :(得分:3)

XML似乎是数据的糟糕选择。如果您控制数据的存储方式,请考虑将其保存到数据库中(据我所知,Phonegap支持)并首先搜索矩形半径。如果你真的必须使用XML,那么对它进行排序可能无济于事(坐标来自2-D集)。也许你可以将它分成两个文件(每个坐标一个)并对它们进行排序,但它确实是非常难看的解决方案。可以通过XSLT实现排序,例如参见here

答案 1 :(得分:1)

您基本上正在尝试重新创建数百/数千名数据库工程师已经解决的问题。成千上万的极客已经学会了排序方法,什么是最优的而不是。然后,大公司聘请了最聪明的人将这些算法放入数据库中。

您的解决方案听起来不太健壮。 XML不适合您正在做的事情。话虽如此,如果你坚持使用XML ......

我至少有2个xml文件 - 一个包含按人工键排序的数据,另一个包含您要搜索的参数。然后你将不得不对后一个文件进行搜索,然后在前一个文件中查找它。巧合的是,大概是数据库的作用。

我真诚地推动为您提供查找/计算的网络服务。您可以使用现有的或创建自己的。听起来你的应用程序无论如何都需要连接才能正常工作。

答案 2 :(得分:1)

您对使用该XML文件有一个限制,好的。但是你对完全不使用数据库也有约束吗?反对保持XML和数据库?

如果没有,您可以存储坐标和密钥,以便立即在XML文件中查找数据库。这将为您提供快速搜索,并从XML文件中读取较慢(但最少)。

如果你也不能使用数据库,你可以尝试将坐标和(再次)密钥存储到另一个文件中的XML文件中,这个文件要小得多,在里面可能你可以组织某种树排序或分区。

最后,如果只能使用一个XML文件,则必须快速解析文件并提取相关的坐标信息。你可以使用正则表达式,通过常规读取足够的数据,你总是在你的内存搜索缓冲区中有一个完整的记录(你需要估计最大记录大小来做到这一点)。但它看起来很昂贵。我强烈推动其他方式来做到这一点。

答案 3 :(得分:0)

在XML之上做到这一点非常糟糕。将 SpatiaLite 捆绑到您的应用中。它是空间特征的SQLite扩展,因此可以对地理位置数据进行各种查询...包括搜索最近的地理点,或者在某个半径范围内。通过SQL查询。 解析XML数据并将它们放到 SpatiaLite 数据库文件中...它肯定比原始XML小。