需要按顺序对数据库表中的邮政地址进行排序

Posted

技术标签:

【中文标题】需要按顺序对数据库表中的邮政地址进行排序【英文标题】:Need to sort postal addresses in a database table in sequence 【发布时间】:2011-11-29 10:28:43 【问题描述】:

我正在开发一个包含邮政地址路由的 android 应用。

我们希望对数据库表中的每个地址进行排序,以便为我们的驱动程序打印出每个地址。当数据库表非常适合时,我们不想花时间自己对地址进行排序。

我正在考虑以某种方式在表中创建一个主键,我们可以轻松地按升序排序。这样可以很容易地为驱动程序创建清单。

我正在研究并发现有一种叫做 WOEID(地球上的 ID)的东西,我认为它代表一个地区,但我不确定它是否对我们有好处,因为同一街区的 2 个邮政地址可以使用相同的 WOEID。

例如这 3 个地址具有相同的 WOEID:

100 Bowden St., Lowell, MA
131 Stedman St., Lowell, MA
50 Stromquest Ave., Lowell, MA

使用像 WOEID 这样的单个数字的概念非常适合我们,但我们需要对这些地址进行排序,以便我们知道哪些地址彼此最接近。

也许我们可以使用一个网站从我们的应用程序中发送一个请求,向他们提供邮政地址,该网站将以我们的应用程序可以解析的格式返回一个代表该地址的数字。

也许有一种方法可以地理编码或将纬度和经度数字转换为我们可以使用的单个数字。

谢谢。

【问题讨论】:

【参考方案1】:

那么当多个地址共享同一个 WOEID 时会出现问题吗?我不知道有多少资源可用,但是将这些数据提供给 Google Maps 等 API 并计算从您所在位置到那里的距离是不是很明智?

如果您想避免使用谷歌,一个非常基本的方法可能是自己进行计算。 (虽然这更像是一种估计。)

但是我感觉你想在总距离上找到最佳路线,所以我认为你的问题也与travelling salesman problem有关

给定一个城市列表及其成对距离,任务是 找出每个城市只访问一次的最短行程。

【讨论】:

是的,这就是我们想要做的。我曾经在一家为辅助运输行业进行路由的公司工作,但他们不允许我们知道他们用来将地址转换为他们在数据库表中使用的单个数字的秘密。由于我是这一切的初学者,你能告诉我如何获取这些信息并引导我学习教程吗?【参考方案2】:

我找到了一个允许我进行反向地理编码的网站。它返回一个纬度和经度。

我尝试了一下,发现我可以将纬度和经度相加得到一个数字。因为给网站一个确切的地址会得到不完全是我正在寻找的结果,所以我只给它一个街道、城市和美国州来定位。然后我可以使用返回的纬度和经度,然后按数字升序对房屋地址进行排序。

例如,我们有许多街道非常网格状,因此添加纬度和经度的 1 个数字代表 1 条特定街道上的许多房屋。在一个街区外的另一条街上,我做了同样的事情。现在我所要做的就是列出数据库表中的所有内容,如下所示: 城市由下拉列表选择,美国各州也由下拉列表选择,然后是每条街道的地理编码编号,然后是家庭编号。

这是我用来获取地理编码的网站以及示例街道地址:

http://where.yahooapis.com/geocode?q=stedman+st,+lowell,+ma

【讨论】:

以上是关于需要按顺序对数据库表中的邮政地址进行排序的主要内容,如果未能解决你的问题,请参考以下文章

从 Postcode DB 获取 lat/lng 并在 PHP/MYSQL 中按最近的顺序排序

SQL server中的物理排序和逻辑排序是怎么回事

SQL 最佳实践 - 可以依靠自动增量字段按时间顺序对行进行排序吗?

顺序表

按 Excel 数据透视表中的“总计”列排序?

如题:如何用一条SQL语句按输入的参数进行判断执行查询数据