好吧,我有一个 xml 文件,我用它来存储位置名称及其地址和坐标。我需要这些数据来帮助在地图上定位位置。现在 xml 文件很大,因为它包含大量数据,所以我想减少搜索时间,因为我想在移动平台上部署应用程序 - android 和 iphone。我所做的是,获取用户当前位置,然后一一解析xml,获取坐标,计算位置和用户之间的距离,然后如果距离小于半径,则在屏幕上打印。所以我可以在这里实现任何排序或搜索算法,它将在用户当前位置坐标上???
4 回答
XML 似乎不是数据的选择。如果您可以控制数据的存储方式,请考虑将其保存到数据库中(据我所知,Phonegap 支持)并首先在矩形半径中搜索。如果您真的必须使用 XML,对其进行排序可能不会有太大帮助(坐标来自二维集)。也许你可以把它分成两个文件(每个坐标一个)并对它们进行排序,但这确实是一个非常丑陋的解决方案。排序可以通过 XSLT 来实现,请参见此处的示例。
您对使用该 XML 文件有限制,好的。但是您是否也有不使用数据库的限制?反对同时保留 XML 和数据库?
如果没有,您可以将坐标和键存储在 XML 文件中以立即搜索到数据库中。这将为您提供快速搜索,并从 XML 文件中读取速度较慢(但最少)。
如果您也不能使用数据库,您可以尝试将 XML 文件的坐标和(再次)键存储在另一个文件中,该文件会小得多,并且您可以在其中组织某种树排序或分区。
最后,如果您只能使用一个 XML 文件,您将不得不快速解析文件并提取相关坐标信息。您可以使用正则表达式来做到这一点,方法是定期读取足够的数据,以便在内存搜索缓冲区中始终拥有完整的记录(您需要估计最大记录大小才能做到这一点)。但它看起来很贵。我会强烈推动其他方式来做到这一点。
您基本上是在尝试重新创建成百上千的数据库工程师已经解决的问题。成千上万的极客已经学会了排序方法以及什么是最佳的,什么不是。然后,大公司聘请其中最聪明的人将这些算法放入数据库中。
您的解决方案听起来不是很健壮。XML 不适用于您正在做的事情。话虽如此,如果您坚持使用 XML...
我将至少有 2 个 xml 文件 - 一个包含按人工键排序的数据,另一个包含您要搜索的参数。然后你将不得不对后一个文件进行搜索,然后在前一个文件中查找它。巧合的是,这大致就是数据库所做的。
我会真诚地推动为您进行查找/计算的 Web 服务。您可以使用现有的或创建自己的。听起来您需要连接才能让您的应用程序正常工作。
非常糟糕的选择在 XML 之上进行。将 SpatiaLite捆绑到您的应用程序。它是空间特征的 SQLite 扩展,因此可以对地理位置数据进行各种查询......包括搜索最近的地理点,或者在某个半径范围内。通过 SQL 查询。解析 XML 数据并将它们放入SpatiaLite DB 文件......它肯定会比原始 XML 小。